ASP.NET MVC 4 응용 프로그램 호출 원격 WebAPI
과거에 몇 개의 ASP.NET MVC 응용 프로그램을 만들었지 만 이전에는 WebAPI를 사용한 적이 없습니다. 일반 MVC 컨트롤러 대신 WebAPI를 통해 간단한 CRUD 작업을 수행하는 간단한 MVC 4 앱을 어떻게 만들 수 있는지 궁금합니다. 트릭은 WebAPI가 별도의 솔루션이어야한다는 것입니다 (실제로 다른 서버 / 도메인에있을 수 있음).
어떻게하나요? 내가 무엇을 놓치고 있습니까? WebAPI의 서버를 가리 키도록 경로를 설정하는 것이 문제입니까? MVC 응용 프로그램을 사용하여 WebAPI를 사용하는 방법을 보여주는 모든 예제는 WebAPI가 MVC 응용 프로그램에 "적용"되거나 적어도 동일한 서버에 있다고 가정하는 것 같습니다.
아, 그리고 명확히하기 위해 jQuery를 사용하는 Ajax 호출에 대해 말하는 것이 아닙니다. MVC 응용 프로그램의 컨트롤러가 WebAPI를 사용하여 데이터를 가져 오거나 넣어야한다는 의미입니다.
HTTP API를 사용하려면 새 HttpClient를 사용해야합니다. 추가적으로 호출을 완전히 비 동기화하도록 조언 할 수 있습니다. ASP.NET MVC 컨트롤러 작업은 작업 기반 비동기 프로그래밍 모델을 지원하므로 매우 강력하고 쉽습니다.
다음은 지나치게 단순화 된 예입니다. 다음 코드는 샘플 요청에 대한 도우미 클래스입니다.
public class CarRESTService {
readonly string uri = "http://localhost:2236/api/cars";
public async Task<List<Car>> GetCarsAsync() {
using (HttpClient httpClient = new HttpClient()) {
return JsonConvert.DeserializeObject<List<Car>>(
await httpClient.GetStringAsync(uri)
);
}
}
}
그런 다음 MVC 컨트롤러를 통해 아래와 같이 비동기식으로 사용할 수 있습니다.
public class HomeController : Controller {
private CarRESTService service = new CarRESTService();
public async Task<ActionResult> Index() {
return View("index",
await service.GetCarsAsync()
);
}
}
아래 게시물에서 ASP.NET MVC를 사용한 비동기 I / O 작업의 효과를 확인할 수 있습니다.
C # 5.0 및 ASP.NET MVC 웹 응용 프로그램의 작업 기반 비동기 프로그래밍에 대한 나의 견해
응답 해 주셔서 감사합니다. @tugberk가 나를 올바른 길로 인도했다고 생각합니다. 이것은 나를 위해 일했습니다 ...
내 CarsRESTService 도우미 :
public class CarsRESTService
{
readonly string baseUri = "http://localhost:9661/api/cars/";
public List<Car> GetCars()
{
string uri = baseUri;
using (HttpClient httpClient = new HttpClient())
{
Task<String> response = httpClient.GetStringAsync(uri);
return JsonConvert.DeserializeObjectAsync<List<Car>>(response.Result).Result;
}
}
public Car GetCarById(int id)
{
string uri = baseUri + id;
using (HttpClient httpClient = new HttpClient())
{
Task<String> response = httpClient.GetStringAsync(uri);
return JsonConvert.DeserializeObjectAsync<Car>(response.Result).Result;
}
}
}
그리고 CarsController.cs의 경우 :
public class CarsController : Controller
{
private CarsRESTService carsService = new CarsRESTService();
//
// GET: /Cars/
public ActionResult Index()
{
return View(carsService.GetCars());
}
//
// GET: /Cars/Details/5
public ActionResult Details(int id = 0)
{
Car car = carsService.GetCarById(id);
if (car == null)
{
return HttpNotFound();
}
return View(car);
}
}
WCF를 사용하여 서비스를 사용할 수 있습니다. 이렇게 :
[ServiceContract]
public interface IDogService
{
[OperationContract]
[WebGet(UriTemplate = "/api/dog")]
IEnumerable<Dog> List();
}
public class DogServiceClient : ClientBase<IDogService>, IDogService
{
public DogServiceClient(string endpointConfigurationName) : base(endpointConfigurationName)
{
}
public IEnumerable<Dog> List()
{
return Channel.List();
}
}
그런 다음 컨트롤러에서 사용할 수 있습니다.
public class HomeController : Controller
{
public HomeController()
{
}
public ActionResult List()
{
var service = new DogServiceClient("YourEndpoint");
var dogs = service.List();
return View(dogs);
}
}
그리고 web.config에 엔드 포인트에 대한 구성을 배치합니다.
<system.serviceModel>
<client>
<endpoint address="http://localhost/DogService" binding="webHttpBinding"
bindingConfiguration="" behaviorConfiguration="DogServiceConfig"
contract="IDogService" name="YourEndpoint" />
</client>
<behaviors>
<endpointBehaviors>
<behavior name="DogServiceConfig">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
http://restsharp.org/ 는 귀하의 질문에 대한 답변입니다. 현재 유사한 구조를 가진 응용 프로그램에서 사용하고 있습니다.
그러나 더 일반적으로 WebAPI를 사용하는 것은 처리 방법은 데이터를 게시하고 요청하는 것입니다. 표준 WebRequest 및 JavascriptSerializer를 사용할 수도 있습니다.
건배.
이 경우 HttpClient 를 사용하여 컨트롤러에서 웹 API를 사용할 수 있습니다 .
참고URL : https://stackoverflow.com/questions/13200381/asp-net-mvc-4-application-calling-remote-webapi
'programing tip' 카테고리의 다른 글
jquery 눈에 거슬리지 않는 유효성 검사 속성 참조? (0) | 2020.12.08 |
---|---|
새로운 Google Now 및 Google+ 카드 인터페이스 (0) | 2020.12.08 |
Python을 사용하여 디렉토리 내용을 디렉토리에 복사 (0) | 2020.12.08 |
사용자 정의 비교기를 사용하여 C ++에서 priority_queue 선언 (0) | 2020.12.08 |
Python의 다른 모듈에서 클래스를 패치하는 Monkey (0) | 2020.12.08 |