Webリクエストの挙動とミドルウェアの仕組み
(3)個々のリクエスト処理を設定するConfigureメソッド(Startupクラス)
3番目に呼び出されるConfigureメソッドでは、個々のHTTPリクエストで処理する流れ(パイプライン)を登録します。IApplicationBuilder引数に対してUse~メソッドで実行順に登録します。またILoggerFactory引数に対してログの設定を行います。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { // ログ設定を設定ファイルから読み込みコンソール表示 loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); if (env.IsDevelopment()) { // 開発環境では開発用例外ページとブラウザリンク機能を使用 app.UseDeveloperExceptionPage(); app.UseBrowserLink(); } else { // 開発環境以外では「/Home/Error」の例外ページを使用 app.UseExceptionHandler("/Home/Error"); } // 静的ファイルを使用 app.UseStaticFiles(); // MVCを使用 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
このコードでは「app.UseExceptionHandler(例外処理)」「app.UseStaticFiles(静的ページ)」「app.UseMvc(MVC処理)」の順で処理を登録しています。
従来のASP.NETでは、HttpModule(イベントに応じた特定の処理)やHttpHandler(拡張子に応じた挙動)にて処理を制御していましたが、ASP.NET Coreでは、「ミドルウェア」という仕組みにてWebアプリケーションを制御します。
この図にあるように、それぞれのミドルウェアは、登録された順に処理を行い、次のミドルウェアに制御を渡していきます。最後まで行けば、逆順で処理が戻ってきます。認証エラーなど、途中で中断することが必要な場合は、そこで中断することも可能です。
標準で、次のようなミドルウェアが用意されています。これらのミドルウェアは必要に応じて追加したり、削除したりできます。
組み込みのミドルウェア | 説明 |
---|---|
Authentication | 認可に関するミドルウェア |
CORS | CORS(Cross-Origin Resource Sharing)設定に関するミドルウェア |
Routing | リクエストのルーティングを設定するミドルウェア |
Session | ユーザーセッションを管理するミドルウェア |
Static Files | 静的ファイルを扱うミドルウェア |
例えば、静的ファイルが不要であれば、UseStaticFilesメソッドを削除すれば良く、セッションを使いたければUseSessionメソッドを追加します。ミドルウェアの詳細はMiddlewareのページを御覧ください。
以上、Webアプリケーションの挙動を指定できました。中編にて紹介した通り、デバッグ実行すれば、Webサーバーが起動し、ブラウザにて結果を確認することができます。
ASP.NET MVCの基本を理解するには
MVCの処理の部分は以前のMVC5の挙動と大きくは変わりませんので、こちらのASP.NET MVC解説記事などを参考にしてプログラムを書いてみると良いでしょう。
[コラム]ASP.NET Coreで採用されているテスティングフレームワーク「xUnit.NET」
MacやLinuxでのテストも想定されるため、ASP.NET CoreではxUnit.NETが標準のユニットテストフレームワークとして採用されています。xUnit.NETはNUnitとMsTestの開発に携わったBrad Wilson氏とJames Newkirk氏が関わった新しいテストツールです。TestやFitxureではなく、Factという属性を付与することが特徴的です。
連載のまとめ
これまで全3回にわたって、ASP.NET Coreについてご紹介してきました。新たに登場したASP.NET Coreは、オープンで柔軟な基盤として生まれ変わりました。Windowsデベロッパー向けという印象が強かったASP.NETとC#ですが、LinuxやLL言語の開発者に対しても認知される機会が増えようとしています。本稿で紹介した内容は、簡単に試せますので一度試してみてはいかがでしょうか。
参考資料
- ASP.NET Core(GitHub)
- .NET Core(GitHub)
- ASP.NET - カスタム ミドルウェアを利用した ASP.NET Core アプリにおける 404 の検出と解決(MSDN マガジン)
- ASP.NET Core アプリを Ubuntu サーバーで公開(creativewebjpさん)
- ASP.NET Core RC2でHelloWorld~EntryPointとStartupも探る
- ASP.NET Core 1.0 のプロジェクト構造とエントリポイントの話(shiba-yanさん)
- ASP.NET Coreはミドルウェアコンポーネントでモジュール化を提供する(InfoQ)