BT

ASP.NET Coreはミドルウェアコンポーネントでモジュール化を提供する

| 作者: Pierre-Luc Maheu フォローする 3 人のフォロワー , 翻訳者 尾崎 義尚 フォローする 0 人のフォロワー 投稿日 2016年3月17日. 推定読書時間: 3 分 |

原文(投稿日:2016/03/09)へのリンク

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

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT