2014-12-29 9 views
6

मेरे पास एक एमवीसी प्रोजेक्ट है जो बाहरी रूप से सामने आया है। मेरे पास एक आंतरिक वेब एपीआई प्रोजेक्ट है।एक वेब एपीआई नियंत्रक के लिए एक एमवीसी नियंत्रक प्रॉक्सी बनाना

मेरे नियंत्रण से परे कारणों से, मैं सीधे वेब एपीआई प्रोजेक्ट का पर्दाफाश नहीं कर सकता और मैं अपने एमवीसी प्रोजेक्ट में वेब एपीआई कंट्रोलर नहीं जोड़ सकता।

मुझे एक एमवीसी नियंत्रक बनाने की आवश्यकता है जो एक वेब एपीआई नियंत्रक के लिए प्रॉक्सी के रूप में कार्य करेगा। मुझे एमवीसी कंट्रोलर से प्रतिक्रिया की आवश्यकता है जैसे कि वेब एपीआई को सीधे कॉल किया गया था।

इसे पूरा करने का सबसे अच्छा तरीका क्या है?

क्या मेरे पास अब तक की तुलना में बेहतर दृष्टिकोण है?

मैं जो त्रुटि प्राप्त कर रहा हूं उसे ठीक कैसे कर सकता हूं?

MyMVCController

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

     var response = proxy.GetData(); 

     return request.CreateResponse(); 
    } 

MyProxyClass

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; 
    } 

MVC नियंत्रक में, मैं अनुरोध पर एक InvalidOperationException हो रही है:

यहाँ मैं अब तक किया है .CreateResponse() लाइन। त्रुटि कहती है:

अनुरोध में कोई कॉन्फ़िगरेशन ऑब्जेक्ट नहीं है या प्रदान की गई कॉन्फ़िगरेशन शून्य थी।

किसी भी मदद की सराहना की जाएगी। मैंने Google और StackOverflow की खोज की है लेकिन मुझे एमवीसी और वेब एपीआई के बीच इस प्रॉक्सी बनाने के लिए एक अच्छा समाधान नहीं मिला है।

धन्यवाद!

उत्तर

3

आप इसे अपने कंट्रोलर में केवल JsonResult एक्शन बनाकर कर सकते हैं जो वेब एपीआई कॉल करने का परिणाम देगा।

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 स्थिति कोड वापस नहीं करेगा? मुझे वेब एपीआई से प्रतिक्रिया के किसी भी स्थिति कोड को संरक्षित करने की आवश्यकता है। साथ ही, मैं नहीं चाहता कि वेब एपीआई ऑब्जेक्ट को क्रमबद्ध करने के लिए, प्रॉक्सी डी-सीरियलाइज करें, और फिर एमवीसी ऑब्जेक्ट को फिर से क्रमबद्ध करें। – jkruer01

+0

आप हमेशा उस स्थिति कोड को वापस कर सकते हैं जिसके परिणामस्वरूप आप वेब एपीआई कॉल – aleha

+0

से प्राप्त परिणाम पर आधार चाहते हैं, धारावाहिक, डी-सीरियलाइज, फिर से समस्या को क्रमबद्ध करने के बारे में क्या? – jkruer01

संबंधित मुद्दे