Asp.net-core-middleware

提供:Dev Guides
移動先:案内検索

ASP.NET Core-ミドルウェア

この章では、ミドルウェアのセットアップ方法を理解します。 ASP.NET Coreのミドルウェアは、アプリケーションがHTTP要求に応答する方法を制御します。 また、エラーが発生したときにアプリケーションがどのように見えるかを制御することもでき、特定のアクションを実行するためにユーザーを認証および承認する方法の重要な部分です。

  • ミドルウェアは、要求と応答を処理するためにアプリケーションパイプラインにアセンブルされるソフトウェアコンポーネントです。
  • 各コンポーネントは、パイプラインの次のコンポーネントにリクエストを渡すかどうかを選択し、次のコンポーネントがパイプラインで呼び出される前後に特定のアクションを実行できます。
  • 要求デリゲートは、要求パイプラインを構築するために使用されます。 要求デリゲートは、各HTTP要求を処理します。
  • ASP.NET Coreのミドルウェアの各部分はオブジェクトであり、各部分には非常に具体的で、焦点が絞られた、限定的な役割があります。
  • 最終的に、アプリケーションが適切に動作するには、多くのミドルウェアが必要です。

ここで、すべてのリクエストに関する情報をアプリケーションに記録すると仮定します。

  • その場合、アプリケーションにインストールする最初のミドルウェアはロギングコンポーネントです。
  • このロガーは着信リクエストに関するすべてを見ることができますが、ロガーは単に情報を記録し、このリクエストを次のミドルウェアに渡すだけです。

ミドルウェア

  • ミドルウェアは、この処理パイプラインに存在する一連のコンポーネントです。
  • アプリケーションにインストールした次のミドルウェアは承認者です。
  • 承認者は、HTTPヘッダーで特定のCookieまたはアクセストークンを探している可能性があります。
  • 承認者がトークンを見つけると、リクエストを続行できます。 そうでない場合、承認者自身がHTTPエラーコードまたはリダイレクトコードでリクエストに応答して、ユーザーをログインページに送信する可能性があります。
  • しかし、そうでなければ、承認者はリクエストをルーターである次のミドルウェアに渡します。
  • ルーターはURLを見て、次のアクションのステップを決定します。
  • ルーターは応答するものがないかアプリケーションを探し、応答するものが見つからない場合、ルーター自体が* 404 Not Foundエラー*を返す場合があります。

ミドルウェアについてさらに理解するために、簡単な例を見てみましょう。 * Startupクラス*のConfigureメソッドを使用して、ASP.NETでミドルウェアをセットアップします。

using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;

namespace FirstAppDemo {
   public class Startup {
      public Startup() {
         var builder = new ConfigurationBuilder()
            .AddJsonFile("AppSettings.json");
         Configuration = builder.Build();
      }
      public IConfiguration Configuration { get; set; }

     //This method gets called by the runtime.
     //Use this method to add services to the container.
     //For more information on how to configure your application,
     //visit http://go.microsoft.com/fwlink/?LinkID=398940
      public void ConfigureServices(IServiceCollection services) {
      }

     //This method gets called by the runtime.
     //Use this method to configure the HTTP request pipeline.
      public void Configure(IApplicationBuilder app) {
         app.UseIISPlatformHandler();

         app.Run(async (context) => {
            var msg = Configuration["message"];
            await context.Response.WriteAsync(msg);
         });
      }
     //Entry point for the application.
      public static void Main(string[] args) => WebApplication.Run<Startup>(args);
   }
}
  • Configure()*メソッド内で、IApplicationBuilderインターフェイスの拡張メソッドを呼び出してミドルウェアを追加します。

デフォルトでは、新しい空のプロジェクトに2つのミドルウェアがあります-

  • IISPlatformHandler
  • app.Runに登録されたミドルウェア

IISPlatformHandler

*IISPlatformHandler* を使用すると、Windows認証を操作できます。 すべての着信要求を調べ、その要求に関連付けられているWindows ID情報があるかどうかを確認し、次のミドルウェアを呼び出します。

app.Runに登録されたミドルウェア

この場合の次のミドルウェアは、 app.Run に登録されたミドルウェアです。 Runメソッドを使用すると、すべての応答を処理するために使用できる別のメソッドを渡すことができます。 Runは、頻繁に目にするものではなく、ミドルウェアのターミナルと呼ばれるものです。

Runに登録したミドルウェアは、別のミドルウェアを呼び出すことはできません。リクエストを受信するだけで、何らかの応答を生成する必要があります。

Responseオブジェクトにもアクセスできます。Responseオブジェクトでできることの1つは、文字列を書き込むことです。

app.Runの後に別のミドルウェアを登録する場合、そのミドルウェアが呼び出されることはありません。これも、Runはミドルウェアの最終的な部分だからです。 次のミドルウェアを呼び出すことはありません。

別のミドルウェアを追加する方法

別のミドルウェアを追加するには、次の手順に進みましょう-

  • ステップ1 *-別のミドルウェアを追加するには、プロジェクトを右クリックして、[NuGetパッケージの管理]を選択します。

ステップ2 *-例外処理、例外表示ページ、および診断情報のために実際にASP.NET Coreミドルウェアである *Microsoft.aspnet.diagnostics を検索します。 この特定のパッケージには、使用可能なさまざまなミドルウェアが含まれています。

Microsoft AspNet Diagnostics

  • ステップ3 *-パッケージがプロジェクトにインストールされていない場合はインストールします。

ステップ4 *- Configure()メソッドに移動して、 *app.UseWelcomePage ミドルウェアを呼び出します。

//This method gets called by the runtime.
//Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app) {
   app.UseIISPlatformHandler();
   app.UseWelcomePage();

   app.Run(async (context) => {
      var msg = Configuration["message"];
      await context.Response.WriteAsync(msg);
   });
}
  • ステップ5 *-アプリケーションを実行すると、次のウェルカム画面が表示されます。

ようこそ画面

このウェルカム画面はそれほど便利ではありません。

ステップ6 *-もう少し役立つかもしれない何か他のものを試してみましょう。 Welcomeページを使用する代わりに、 *RuntimeInfoPage を使用します。

//This method gets called by the runtime.
//Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app) {
   app.UseIISPlatformHandler();
   app.UseRuntimeInfoPage();

   app.Run(async (context) => {
      var msg = Configuration["message"];
      await context.Response.WriteAsync(msg);
   });
}

ステップ7 *- *Startup.cs ページを保存してブラウザを更新すると、次のページが表示されます。

スタートアップCS

この RuntimeInfoPage は、特定のURLに着信するリクエストにのみ応答するミドルウェアです。 着信リクエストがそのURLと一致しない場合、このミドルウェアは、リクエストを次のミドルウェアにパススルーさせるだけです。 要求はIISPlatformHandlerミドルウェアを通過し、UseRuntimeInfoPageミドルウェアに移動します。 応答は作成されないため、app.Runに移動して文字列を表示します。

ステップ8 *-URLの最後に「/*runtimeinfo 」を追加します。 そのランタイム情報ページミドルウェアによって生成されるページが表示されます。

ランタイム情報

これで、オペレーティングシステム、ランタイムバージョン、アーキテクチャ、タイプ、使用しているすべてのパッケージなど、ランタイム環境に関する情報を提供する応答が表示されます。