ASP.NET Coreのカスタムミドルウェア

★★★ Live配信告知 ★★★ぜひお申込みください!
◆◇SIOS PS Live配信 第20回◆◇
9/28(水) 19:00~ 〜 Google Cloudで実現したクラウド型電子カルテサービス「INDIGO NOTE」の開発小話 〜 開発に携わった3人のエンジニアが「Indigo Note」の概要、フロント開発・API開発をお話しします。

こんにちは、サイオステクノロジー技術部 武井です。今回は、ASP.NET Coreでカスタムミドルウェアを作成したいと思います。

カスタムミドルウェアとは

ミドルウェアについては、こちらの記事にて、お話致しました通りです。カスタムミドルウェアとは、このミドルウェアを独立したクラスとして作成し、呼び出しやメンテナンス等を簡単にしたものになります。

カスタムミドルウェアのクラスには以下のルールがあります。

  • コンストラクタにMicrosoft.AspNetCore.Http.ReuqestDelegate型の引数を取ること。
  • 戻り値がSystem.Threading.Tasks.Task型、引数にMicrosoft.AspNetCore.Http.HttpContext型を持つInvokeという名前のメソッドを持つこと

とりあえずソースコードを見てみることとしましょう

ソースコード

以下の要件を満たすカスタムミドルウェアを作成してみます。

HTTPリクエストの処理開始前と処理終了後にログを出力する。

ソースコードは以下のとおりです。

public class LoggingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger<LoggingMiddleware> _logger;

    // コンストラクタにRequestDelegate型の引数を取っています。
    // ログに出力するので、ILoggerインターフェースも引数に取ります。
    // loggerにログの実装がDIされます。
    public LoggingMiddleware(RequestDelegate next, ILogger<LoggingMiddleware> logger)
    {   
        _next = next;
        _logger = logger;
    }   

    // ミドルウェアの実行メソッドです。
    public async Task Invoke(HttpContext httpsContext)
    {   
        this._logger.LogInformation("処理開始:" + httpsContext.Request.Path);
        // 次のミドルウェアが呼ばれます。その前後で、処理開始、処理終了のログを出力しています。
        await _next(httpsContext);
        this._logger.LogInformation("処理終了"); 
    }   
}

// ミドルウェアの呼び出しを簡単にする拡張メソッドです。
// IApplicationBuilderを拡張しています。
public static class LoggingMiddlewareExtensions
{
    public static IApplicationBuilder UseLoggingMiddleware(this IApplicationBuilder builder)
    {   
        // IApplicationBuilderインターフェースのUseMiddlewareメソッドの
        // ジェネリック型に、作成したミドルウェアのクラス型を指定すれば、
        // ミドルウェアの登録は完了です。
        return builder.UseMiddleware<LoggingMiddleware>();
    }   
}

 

呼び出すときはStartupクラスのConfigureメソッドで、先程拡張したメソッドを以下のよう呼び出します。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    // 先程拡張したメソッドを呼び出しています。
    // app.UseMiddleware<LoggingMiddleware>();と同義です。
    app.UseLoggingMiddleware();

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

 

実行結果は以下のとおりです。

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/
info: CustomMiddleware.LoggingMiddleware[0]
      処理開始:/
info: CustomMiddleware.LoggingMiddleware[0]
      処理終了
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 65.7437ms 200

まとめ

もうカスタムミドルウェアのとりこ(^o^)





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!


ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

2人がこの投稿は役に立ったと言っています。

Be the first to comment

Leave a Reply

Your email address will not be published.


*