404ページの表示方法です。
ASP.NET Core MVCでは、コントローラーやアクションが見つからない場合は404 NotFoundのみが返ってくるようになりました。
従来(MVC5)では404と同時にサーバーエラーが表示されていました。
この変更はこれで良いのですが、ブラウザ上にはブランクページが表示されるようになりました。
開発者ツールを用いればステータスも分かることではあるのですが、開発時にもある程度分かりやすい表示ができると好ましいです。
というわけでStatusCodePagesMiddlewareを利用して404ページを表示します。
StatusCodePagesMiddlewareを用いる
Startup.csのConfigureメソッドにて、"UseStatusCodePages"を使用すると、400番台から500番台のステータスコードのレスポンス時にページ上に簡易表示がなされます。
もちろん、こんな簡素な表示を本番環境で用いるわけにはいかないので、開発環境以外では"UseStatusCodePagesWithRedirects"などを使うようになると思います。
フォーマット文字列の"{0}"にはステータスコードが入ります。
if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); app.UseStatusCodePages(); } else { app.UseExceptionHandler("/Home/Error"); app.UseStatusCodePagesWithRedirects("~/Error/{0}"); }
そして、別途適当なコントローラーにてハンドリングすればよいです。
[Route("/Error/{code?}")] public IActionResult Error(int? code = null) { if(code.HasValue && code.Value == 404) { return View("404"); } return View(); }
リダイレクトされるのが困る場合は、"app.UseStatusCodePagesWithReExecute"などをどうぞ。
オフィシャル情報
公式ドキュメントは下記にて。
Error Handling — ASP.NET documentation
また、UseStatusCodePagesの実装はGitHubにて公開されています。