私のアプリはASP.NET Core RC2
です。ステータスコードと例外ハンドラのミドルウェアの仕組みは混乱しています。例外が異なるページにリダイレクトされるのはなぜですか?
私のアプリは次のミドルウェアで構成されています。それは返す必要があります表示
app.UseStatusCodePagesWithReExecute("/Error/Status/{0}");
app.UseExceptionHandler("/Error/ServerError");
コントローラハンドル:
[HttpGet]
public IActionResult Status(int id)
{
switch (id)
{
case 404:
return View("404");
case 400:
return View("400");
case 500:
return View("500");
default:
return View("501");
}
}
[HttpGet]
public IActionResult ServerError()
{
return View();
}
私は未知のURLに移動するとステータスアクションから予想されるように、それは404 page
を返します。
例外をスローするアクションに移動すると、/Error/ServerError
にナビゲートされ、ステータスアクションでは500 page
にはナビゲートされません。私はそれがステータスアクションから500 page
を返しますStatusCodeResult(500);
を返すアクションに移動した場合
public IActionResult ThrowException()
{
throw new Exception();
}
。私を混乱させる何
[HttpGet]
public IActionResult Error500()
{
return new StatusCodeResult(500);
}
は、コンソールは、両方の結果が500 (Internal Server Error)
が、彼らは、彼らはミドルウェアに基づいて別のページに移動します返されるかに応じて返すことを示すことです。
これはなぜでしょうか?
を私はわからないが、私は、 'ASPNET/Diagnostics'見直しと私は' StatusCodePagesMiddleware'に以下の条件を見た: '(context.Response.HasStarted ||場合... ){return;} '。また、 'ExceptionHandlerMiddleware'文脈の中で.Response.OnStarting(_clearCacheHeadersDelegate、context.Response);'。私は 'StatusCodePagesMiddleware'がステータスコードを処理する前に、Responseがすでに' ExceptionHandlerMiddleware'によって開始されていると思います。 –