2016-01-21 17 views
8

Varolan bir WebApi 2 projesinden kodu geçiriyorum ve ASP.NET 5 MVC 6'da aşağıdaki kodun eşdeğerini nasıl gerçekleştireceğimi merak ediyorum. Bir işleyici seçeneğini kabul eden yol kodu.ASP.NET MVC 6'da bir API proxy'si oluşturma

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

Sadece istek veya istek var mı? –

cevap

8

Bu sadece başımın üst kısmından değil, ancak bir ara katman oluşturabilirsiniz. Bu, üstbilgilerle istekleri almak için çalışır, ancak daha fazlasını yapmak için değiştirilebilir.

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

Yolun Biz aslında (iyi stajyerimiz yaptığımız :)) bunun için bir ara katman yazdı

+0

Cevabınız için teşekkür ederim, bu konuda genişleyebildiğim ve ihtiyacım olanı yapan tam bir ara katman oluşturdum. –

+0

Hiç sorunum yok –

+3

Yardım edebileceğime sevindim Bunu herkes için yeniden kullanılabilir bir şeye dönüştürmeye çalıştım. Burada GitHub'da bulabilirsiniz: https://github.com/ZoolWay/GlacierCrates.AspNetCore.ApiProxy – ZoolWay

3

/API/someapi ile başlar nerede herhangi isteklerinde devreye olacak) app.UseMvc (befire bu koyarsanız https://github.com/aspnet/Proxy

+2

Teşekkürler. Gerçi tüm istekleri proxy gibi görünüyor. Bir şey mi eksik? Gelen rota/URL/isteğine göre belirli istekleri bildirmem gerekiyor. Her iki durumda da, yararlı bir referanstır. –

+0

Cool, paylaşım için teşekkürler! Sadece sormak istedim - burada açıklanan yuva sorunu var mı (yeni HttpClient() oluştururken): https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ –

+0

@ChrisPutnam. Uygulamak istediğiniz yeri/zamanı seçmek ve seçmek için app. Proxy middleware harika çalıştı. Başparmak yukarıya internete –