ASP入門.ネットコアミドルウェア


ASP .ネットコアは、開発者は現代のWebベースのアプリケーションを開発するために学ぶ必要がある多くの新しい概念を導入しました.つの概念は、開発者が一連のコンポーネント(別名ミドルウェア)をウェブ要求と応答処理の間に走らせる「ミドルウェア」です.このチュートリアルでは、ASPの概要を説明します.NETコアミドルウェア.また、ASP . NETで利用可能ないくつかの組み込みミドルウェアを使用して、リクエスト/応答パイプラインを構築する方法を学びます.ネットコア.

ミドルウェアとは


ミドルウェアは、着信要求と発信応答を処理するコードまたはコンポーネントです.これらのコンポーネントは、パイプライン内の各コンポーネントが、パイプライン内の次のミドルウェアにリクエストを渡す前に、何らかのロジックまたはプロセス要求を実行する機会を取得するように、一緒に連鎖されます.また、各ミドルウェアは、発信する応答を逆の順序で処理する機会を得る.

ミドルウェアパイプラインの設定


通常はASPを設定します.私たちのスタートアップの構成方法のネットミドルウェア.Configメソッド内のパラメーターとして使用可能なIApplicationBuilderクラスを使用したCSファイル.
public class Startup
{
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Configure Middleware Pipeline Here
    }
}
リクエストパイプラインをビルドするには、組み込みのASPの複数のインスタンスを一緒にチェインする必要があります.RequestDiagateという名前のNETコアデリゲートです.RequestDirectoryは、HttpContextをパラメーターとして受け取り、タスクを返すすべてのメソッドを表します.各デリゲートは、次のデリゲートの前後に操作を行うことができます.
public delegate System.Threading.Tasks.Task RequestDelegate(HttpContext context);
RequestDirectoryを2つの異なる方法で構成するには、ImplicationBuilderクラスにランニング、マップ、または使用方法を使用できます.
  • ミドルウェアインラインを匿名メソッドとして設定できます.このタイプのミドルウェアはインラインミドルウェアと呼ばれます.
  • 私たちは再利用可能なCチェックインクラスを作成し、そのクラスをミドルウェアとして構成することもできます.
  • インラインミドルウェアの簡単な例を以下に示します.HTTPリクエストに応じて以下の匿名関数が呼び出されます.
    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.Run(async context =>
            {
                await context.Response.WriteAsync("Hello, World!");
            });
        }
    }
    
    上記の例で使用されるRunメソッドは、次のパラメータを受け取りません.これは、パイプラインの次のミドルウェアを呼び出すことができません.パイプラインを終了し、実行するミドルウェアがないときは、通常、パイプラインの最後にrun ()メソッドを使用します.複数のミドルウェアコンポーネントをシーケンスで設定するには、以下の例に示すようにuse ()拡張メソッドを使用できます.
    public class Startup
    {
        public void Configure(IApplicationBuilder app)
        {
            app.Use(async (context, next) =>
            {
                if (context.Request.Path == "/hello")
                {
                    await context.Response.WriteAsync("Hello World!");
                }
    
                await next();
            });
    
            app.Run(async context =>
            {
                await context.Response.WriteAsync("End of Middleware Pipeline.");
            });    
        }
    }
    
    リクエストURLが/helloで終了しない場合、最初のミドルウェアコードは実行されず、リクエストは次のミドルウェアに移動します.を返します.

    リクエストURLが/helloに終わるならば、我々の最初のミドルウェア・コードは実行します、そして、それは「Hello World」を書きます応答に応じて、リクエストは次のミドルウェアに移動します.を返します.

    ミドルウェア処理命令


    上記の簡単な例から、ミドルウェアが構成されている順序が重要であることは非常に明白です.たとえば、以下の例では、第1および第2のミドルウェアを簡単に並べ替えることができ、異なる順序でコードを実行できます.
    app.Use(async (context, next) =>
    {
        await context.Response.WriteAsync("First");
        await next();
    });
    
    app.Use(async (context, next) =>
    {
        await context.Response.WriteAsync("Second");
        await next();
    });            
    
    app.Run(async context =>
    {
        await context.Response.WriteAsync("Last.");
    });
    
    ASP . NET Frameworkの典型的な順序を次の図に示します.NETコア内蔵ミドルウェアパイプラインは、要求と応答を処理するように構成されています.また、カスタムロジックを実行するカスタムミドルウェアを追加できる場所を示します.

    現実世界のアプリケーションでは、起動時にすべてのミドルウェアコンポーネントをインラインで定義することは推奨されません.csファイル.私たちは別のCの懸垂クラスを作成し、それらのクラスのカスタムミドルウェアを拡張メソッドとして定義します.以下の例では、カスタムミドルウェアをエクステンションメソッドとして別のC Chorseクラスで定義する方法を示します.
    public static class ApplicationBuilderExtensions
    {
        public static void UseFirstMiddleware(this IApplicationBuilder app)
        {
            app.Use(async (context, next) =>
            {
                await context.Response.WriteAsync("First");
                await next();
            });
        }
    
        public static void UseSecondMiddleware(this IApplicationBuilder app)
        {
            app.Use(async (context, next) =>
            {
                await context.Response.WriteAsync("Second");
                await next();
            });
        }
    
        public static void UseLastMiddleware(this IApplicationBuilder app)
        {
            app.Run(async context =>
            {
                await context.Response.WriteAsync("Last");
            });
        }
    }
    
    上記のミドルウェアが定義されると、起動のconfigureメソッドでそれらを呼び出すことができます.csファイルは次のようになります.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseFirstMiddleware();
        app.UseSecondMiddleware();
        app.UseLastMiddleware();
    }
    

    ASPを使う。ネットコア内蔵ミドルウェア


    ASP .NETのコアは、モジュールのフレームワークです.ASPによって提供されるいくつかの組み込みミドルウェアがあります.ネットコアと多くのNugetパッケージマネージャ経由でサードパーティのライブラリとして追加することができます.最も一般的なミドルウェアのいくつかは、認証、承認、MVC、セッション、静的ファイルなどです.ほとんどの場合、対応するusexxxメソッドを呼び出して、組み込みの、あるいはサードパーティ製のミドルウェアを設定する必要があります.たとえば、ウェルカムページをWebサイトの訪問者に表示するには、次のようにWelcoMegageMiddlewareを設定できます.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseWelcomePage();
    }
    
    プロジェクトをブラウザで実行する場合は、次のページが表示されます.

    上記のミドルウェアは、マイクロソフトASPの一部です.他のいくつかの便利なミドルウェアも含まれています.たとえば、次の2つのミドルウェアを使用して、開発および生産環境で異なるエラーページを構成し、表示できます.
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }
    
    同様に、プロジェクト内のスタイルシートやJavaScript、イメージなどのルーティングや静的ファイルを設定するミドルウェアが組み込まれています.
    app.UseStaticFiles();
    app.UseRouting();
    
    アプリケーションの健康状態をチェックする場合は、ヘルスチェックサービスを登録し、エンドポイントを構成し、アプリケーションのヘルスを次のように表示できます.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddHealthChecks();
    }
    
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHealthChecks("/health");
        });
    }
    
    あなたがブラウザでアプリケーションを実行し、URLの最後に入力/ヒースを入力する場合は、“健康”メッセージを表示することができるようになりますあなたのアプリケーションが良い形にあることを示す.

    明らかに、私はこのチュートリアルではすべての組み込みのミドルウェアをカバーすることはできませんので、これらのミドルウェアの詳細については興味を持っている場合は、公式Microsoft docsに行くことができます.

    概要


    このチュートリアルでは、ASP . NETの基本を網羅しています.NETコアミドルウェアは、着信要求と発信応答を処理するコードを書く方法を示します.私はこのチュートリアルでは非常に基本的なミドルウェアのコンポーネントを書いているが、あなたのアプリケーションでより複雑なミドルウェアを書くために同じ概念を使用することができます.