2016-01-21 9 views
8

私は既存のWebApi 2プロジェクトからコードを移行していますが、ASP.NET 5 MVC 6で以下のコードと同等の機能を実行する方法は不思議です。ハンドラオプションを受け入れるルートコード。ASP.NET MVCでAPIプロキシを作成する

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

あなたはパスが我々が実際に(だけでなく私たちのインターンがやった:))、このためのミドルウェアを書いた

+0

あなたの返事をありがとう、私はこれを拡張し、私が必要なものを行う完全なミドルウェアを作成することができました。 –

+0

私は助けることができてうれしいです問題は –

+3

私は誰もが再利用可能なものにそれを構築しようとしました。これはGitHub上で見つけることができます:https://github.com/ZoolWay/GlacierCrates.AspNetCore.ApiProxy – ZoolWay

3

/API/someapiで始まる、それはすべての要求をインターセプトします)app.UseMvc(befireこれを置く場合https://github.com/aspnet/Proxy

+2

ありがとうございました。それはすべての要求を代理するように見える。何か不足していますか?私は、到着しているルート/ URL /リクエストに基づいて特定のリクエストをプロキシする必要があります。いずれにせよ、それは参考になります。 –

+0

共有していただきありがとうございます。ちょうど尋ねたかったのですが、ここに(HttpClient()を新規作成する)ソケットの問題がありますか? https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ –

+0

@ChrisPutnam。 app.UseWhenを使用して、適用する場所とタイミングを選択して選択します。プロキシミドルウェアはうまくいった。インターンまでの親指 –

関連する問題