ASP.NET CoreはHTTPパイプラインをカスタマイズする概念としてミドルウェアを導入している。ミドルウェアはWebアプリケーションを形成するために構成されているコンポーネントである。コンセプトはASP.NETの以前のバージョンと同様の機能を提供するOWINとKatanaに触発されたものである。
ミドルウェアはHTTPパイプラインの上に座しているコンポーネントである。ミドルウェアはひとつずつ実行され、パイプラインの次のミドルウェアを実行する責任を持つ。各ミドルウェアは呼び出しチェーンを終わらせることができる。たとえば、認証ミドルウェアは、認証プロセスが失敗した場合、次のミドルウェアを実行しないことができる。以下の画像は実行フローを示している。
ASP.NET Coreに含まれるミドルウェアは事前に組み込まれたものだけでなく新しく作ることも可能だ。 カスタムミドルウェアはHttpContextを最初のパラメータとして受け入れるメソッドとクラスで定義されている。このメソッドは依存性注入を解決する追加パラメータを含むことができる。以下のクラスはロギングミドルウェアの定義だ:
public class RequestLoggerMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
public RequestLoggerMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
{
_next = next;
_logger = loggerFactory.CreateLogger<RequestLoggerMiddleware>();
}
public async Task Invoke(HttpContext context)
{
_logger.LogInformation("Handling request: " + context.Request.Path);
await _next.Invoke(context);
_logger.LogInformation("Finished handling request.");
}
}
このミドルウェアは実行するためにStartupクラスのConfigureメソッドに登録する必要がある。
public void Configure(IApplicationBuilder app)
{
app.UseMiddleware<RequestLoggerMiddleware>();
}
注意すべき重要なポイントはミドルウェアはパイプラインに追加された順に実行されることだ。これはミドルウェア間の暗黙の依存関係が決まることに注意する必要があることを意味する。たとえば、セッションステートを使うコンポーネントはセッションミドルウェアの前に実行するとクラッシュに繋がる。
“使うものだけ払う”というASP.NET Coreの理念により、いくつかのアプリケーションは明示的に構成されたミドルウェアのみが実行される事によるパフォーマンスの改善というメリットを受ける。フレームワークはすでにSystem.Web.dllをベースにするのではなく、NuGetパッケージにより提供されている。これはアップデートもNuGetによって処理され、ミドルウェアごとにアップデートをできることを意味する。
Rate this Article
- Editor Review
- Chief Editor Action