2016-01-21 13 views
8

में एक एपीआई प्रॉक्सी बनाना मैं मौजूदा वेबएपी 2 प्रोजेक्ट से कोड माइग्रेट कर रहा हूं और मैं सोच रहा हूं कि एएसपी.नेट 5 एमवीसी 6 में नीचे दिए गए कोड के बराबर कैसे प्रदर्शन करना है। मुझे कोई नहीं दिख रहा है मार्ग कोड जो एक हैंडलर विकल्प स्वीकार करता है।एएसपी.नेट एमवीसी 6

config.Routes.MapHttpRoute("SomeApiProxy", "api/someapi/{*path}", 
    handler: HttpClientFactory.CreatePipeline(new HttpClientHandler(), new DelegatingHandler[] {new ForwardingProxyHandler(new Uri("http://some-api.com/api/v2/"))}), 
    defaults: new {path = RouteParameter.Optional}, 
    constraints: null 
); 
+0

क्या यह सिर्फ अनुरोध या कोई अनुरोध प्राप्त करता है? –

उत्तर

8

यह मेरे सिर के शीर्ष से बाहर है लेकिन आप एक मिडलवेयर बना सकते हैं। यह बिना हेडर के अनुरोध प्राप्त करने के लिए काम करेगा लेकिन अधिक करने के लिए संशोधित किया जा सकता है।

app.Use(async (context, next) => 
{ 
    var pathAndQuery = context.Request.GetUri().PathAndQuery; 

    const string apiEndpoint = "/api/someapi/"; 
    if (!pathAndQuery.StartsWith(apiEndpoint)) 
     //continues through the rest of the pipeline 
     await next(); 
    else 
    { 
     using (var httpClient = new HttpClient()) 
     { 
      var response = await httpClient.GetAsync("http://some-api.com/api/v2/" + pathAndQuery.Replace(apiEndpoint, "")); 
      var result = await response.Content.ReadAsStringAsync(); 

      context.Response.StatusCode = (int)response.StatusCode; 
      await context.Response.WriteAsync(result); 
     } 
    } 
}); 

आप app.UseMvc (befire इस डाल दिया) जहां पथ/API/someapi साथ शुरू होता है

+0

आपके उत्तर के लिए धन्यवाद, मैं इस पर विस्तार करने और एक पूर्ण मिडलवेयर बनाने में सक्षम था जो मुझे चाहिए था। –

+0

कोई समस्या नहीं है मैं –

+3

मदद कर सकता हूं मैंने इसे हर किसी के लिए पुन: प्रयोज्य बनाने की कोशिश की। आप इसे यहां गिटहब पर पा सकते हैं: https://github.com/ZoolWay/GlacierCrates.AspNetCore.ApiProxy – ZoolWay

3

हम वास्तव में (अच्छी तरह से हमारे प्रशिक्षु किया :)) इस के लिए एक मध्यस्थ ने लिखा है कि यह किसी भी अनुरोधों को रोक होगा https://github.com/aspnet/Proxy

+2

धन्यवाद। ऐसा लगता है कि यह सभी अनुरोधों को प्रॉक्सी करता है। क्या मैं कुछ भूल रहा हूँ? मुझे आने वाले मार्ग/यूआरएल/अनुरोध के आधार पर कुछ अनुरोधों को प्रॉक्सी करना होगा। किसी भी तरह से, यह एक उपयोगी संदर्भ है। –

+0

कूल, साझा करने के लिए धन्यवाद! बस पूछना चाहता था - क्या इसमें यहां वर्णित सॉकेट समस्याएं हैं (जैसा कि नया एचटीपी क्लाइंट() बना रहा है): https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ –

+0

@ChrisPutnam। ऐप का उपयोग करें। उपयोग करने के लिए जब आप इसे कब/कब लागू करना चाहते हैं। प्रॉक्सी मिडलवेयर बहुत अच्छा काम किया। इंटर्न तक अंगूठे –

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