以下のミドルウェアを使用して、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のみの問題のようです。