2014-12-29 4 views
6

외부에 노출 된 MVC 프로젝트가 있습니다. 내부 웹 API 프로젝트가 있습니다.웹 API 컨트롤러 용 MVC 컨트롤러 프록시 만들기

내 제어 할 수없는 이유로 웹 API 프로젝트를 직접 노출 할 수 없으며 웹 API 컨트롤러를 MVC 프로젝트에 추가 할 수 없습니다.

웹 API 컨트롤러의 프록시 역할을하는 MVC 컨트롤러를 만들어야합니다. 웹 API가 직접 호출 된 것처럼 보이는 MVC Controller 응답이 필요합니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

내가 지금까지 가지고있는 것보다 나은 접근법이 있습니까?

어떻게 오류를 해결할 수 있습니까? MVC의 컨트롤러에서

public HttpResponseMessage GetData() 
    { 
     ... 
     return HttpRequest(new HttpRequestMessage(HttpMethod.Get, uri)); 
    } 

private HttpResponseMessage HttpRequest(HttpRequestMessage message) 
    { 
     HttpResponseMessage response; 

     ... 

     using (var client = new HttpClient()) 
     { 
      client.Timeout = TimeSpan.FromSeconds(120); 
      response = client.SendAsync(message).Result; 
     } 

     return response; 
    } 

, 내가 요청에 InvalidOperationException이 무엇입니까 MyMVCController

[HttpGet] 
public HttpResponseMessage GetData(HttpRequestMessage request) 
    { 
     ... 

     var response = proxy.GetData(); 

     return request.CreateResponse(); 
    } 

MyProxyClass : 여기

는 내가 지금까지 무엇을 가지고 .CreateResponse() 행. 오류 메시지 :

요청에 연결된 구성 개체가 없거나 제공된 구성이 null입니다.

도움을 주시면 감사하겠습니다. Google과 StackOverflow를 검색했지만 MVC와 웹 API간에이 프록시를 만드는 좋은 솔루션을 찾을 수 없었습니다.

감사합니다.

답변

3

컨트롤러에 JsonResult 액션을 생성하면 웹 API 호출 결과를 반환 할 수 있습니다.

public class HomeController : Controller 
{ 
    public async Task<JsonResult> CallToWebApi() 
    { 
     return this.Content(
      await new WebApiCaller().GetObjectsAsync(), 
      "application/json" 
     ); 
    } 
} 

public class WebApiCaller 
{ 
    readonly string uri = "your url"; 

    public async Task<string> GetObjectsAsync() 
    { 
     using (HttpClient httpClient = new HttpClient()) 
     { 
      return await httpClient.GetStringAsync(uri); 
     } 
    } 
} 
+1

항상 200 개의 상태 코드를 반환하지 않겠습니까? Web API에서 응답의 상태 코드를 보존해야합니다. 또한 웹 API에서 객체 직렬화, 프록시 비 직렬화 및 MVC 객체 다시 직렬화를 원하지 않습니다. – jkruer01

+0

언제든지 웹 API 호출 – aleha

+0

에서 얻은 결과를 기반으로 원하는 상태 코드를 반환 할 수 있습니다. serialize, de-serialize, serialize again 문제는 무엇입니까? – jkruer01