2017-12-27 13 views
0

マップとマップを使用する場合リクエストを認証している間にasp.netコアミドルウェアで分岐します。マップとマップの違いasp.netコアミドルウェアの分岐?

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 

     app.Map("", (appBuilder) => 
     { 
      appBuilder.Run(async (context) => { 

       await context.Response.WriteAsync(""); 
      }); 
     }); 

     app.MapWhen(context => context.Request.Query.ContainsKey(""), (appBuilder) => 
     { 
      appBuilder.Run(async (context) => 
      { 
       await context.Response.WriteAsync(""); 
      }); 

     }); 
    } 

答えて

2

Map指定されたリクエストパスのみの一致に基づいてリクエストを分岐することができます。 MapWhenはより強力で、現在のHttpContextオブジェクトで動作する指定された述語の結果に基づいて要求を分岐することができます。 HttpContextにはHTTPリクエストに関するすべての情報が含まれているため、MapWhenでは、分岐要求パイプラインに非常に特殊な条件を使用できます。

任意のMapコールはMapWhenに簡単に変換できますが、その逆もありません。たとえば、このMapコール:「地図とMapWhenブランチを使用する場合は、」

app.MapWhen(context => context.Request.Path.StartsWithSegments("SomePathMatch"), (appBuilder) => 
{ 
    appBuilder.Run(async (context) => 
    { 
     await context.Response.WriteAsync(""); 
    }); 
}); 

だからあなたの質問に答える:

app.Map("SomePathMatch", (appBuilder) => 
{ 
    appBuilder.Run(async (context) => { 

     await context.Response.WriteAsync(""); 
    }); 
}); 

は、以下のMapWhenの呼び出しに相当しますが、分岐要求に基づいときMapを使用しますリクエストパスのみ。 HTTP要求の他のデータに基づいて要求を分岐する場合は、MapWhenを使用します。