RealPath:
WebPath:
2018/08/12 10:29 (JST) 更新
エラー処理等 >>

エラー表示のカスタマイズ

Contents

Startup.cs の Configure() 内で UseStatusCodePagesWithReExecute() を実行しておくことにより、HTTPステータスコードが 4XX 系や 5XX 系だった場合の表示内容をカスタマイズすることができる。

例えば app.UseStatusCodePagesWithReExecute("/StatusError", "?statusCode={0}"); としておけば、404 エラーが発生した場合には /StatusError?statusCode=404 の内容が表示される。

Startup.cs の編集

HTTPステータスコードが 4XX 系や 5XX 系だった場合に /StatusError?statusCode={HTTPステータスコード} の実行内容を表示するようにする。

/Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Error");
    }
    app.UseStatusCodePagesWithReExecute("/StatusError", "?statusCode={0}"); // ★ここを追加
    ....
}

/StatusError の実装

/StatusError の実装方法はいくつかある。MVC のやり方に沿うのであれば StatusErrorController を新規に作り受け皿とすることもできるが、今回は Razor Pages の仕組みによりコントローラ実装を省略する。

(新規) /Pages/StatusError.cshtml
@page
@model StatusErrorModel

<h1 class="text-danger">@Model.Summary</h1>
(新規) /Pages/StatusError.cshtml.cs
using Microsoft.AspNetCore.Mvc.RazorPages;

public class StatusErrorModel : PageModel
{
    public string StatusCode { get; set; }
    public string Summary { get; set; }

    public void OnGet()
    {
        StatusCode = this.Request.Query["statusCode"];
        switch (StatusCode)
        {
            case "404":
                Summary = "NOT FOUND";
                break;
            default:
                Summary = "SERVER ERROR";
                break;
        }
    }
}