web-dev-qa-db-ja.com

ASP.NET CoreMVCの404NotFoundページを表示する

以下のミドルウェアを使用して、HTTPステータスコード400〜599のエラーページを設定しています。したがって、/error/400にアクセスすると、400 BadRequestエラーページが表示されます。

application.UseStatusCodePagesWithReExecute("/error/{0}");

[Route("[controller]")]
public class ErrorController : Controller
{
    [HttpGet("{statusCode}")]
    public IActionResult Error(int statusCode)
    {
        this.Response.StatusCode = statusCode;
        return this.View(statusCode);
    }
}

ただし、/this-page-does-not-existにアクセスすると、一般的なIIS 404 NotFoundエラーページが表示されます。

どのルートにも一致しないリクエストを処理する方法はありますか? IISが引き継ぐ前に、このタイプの要求を処理するにはどうすればよいですか?理想的には、エラーコントローラーが処理できるように要求を/error/404に転送したいと思います。

ASP.NET 4.6 MVC 5では、これを行うためにWeb.configファイルのhttpErrorsセクションを使用する必要がありました。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
      <remove statusCode="404" />
      <error statusCode="404" responseMode="ExecuteURL" path="/error/404/" />
    </httpErrors>
  </system.webServer>
</configuration>

this SO item 、IISは、UseStatusCodePagesWithReExecuteに到達する前に404を取得します(したがって処理します))に基づいています。

これを試しましたか: https://github.com/aspnet/Diagnostics/issues/144 ? 404を受信したリクエストを終了して、処理するためにIISに移動しないようにすることをお勧めします。これを行うために、スタートアップに追加するコードは次のとおりです。

app.Run(context =>
{
   context.Response.StatusCode = 404;
   return Task.FromResult(0);
});

これはIISのみの問題のようです。

5
Frank Fajardo