ASP.NET Coreにカスタムエラーページが表示されます
2797 ワード
前言
プログラマー一人一人がASPにいることを知っていると思います.NET Coreでは、デフォルトで500または404エラーが発生した場合、httpステータスコードのみが返され、何も返されず、ページが空白になります.
StartupでcsのConfigure()に
500エラーの場合、
404エラーについては、
そして対応するURLに渡して処理する.
その後、最下位の例外が発生した場合、カスタムエラーページが表示されないか、次の例外などの空白が表示されないかという問題が発生しました.
そこでこの問題に対して改善を行い、500エラーに対して直接静的ファイルで応答する、Startup.csの
以上、ASPについてです.NET Coreにはカスタマイズエラーページのすべての内容が表示されています.本文の内容は皆さんの勉強や仕事に一定の助けになることを望んでいます.もし疑問があれば、伝言を残して交流してください.
プログラマー一人一人がASPにいることを知っていると思います.NET Coreでは、デフォルトで500または404エラーが発生した場合、httpステータスコードのみが返され、何も返されず、ページが空白になります.
StartupでcsのConfigure()に
app.UseStatusCodePages();
500エラーを加えた場合もまだ空白(なぜか500エラーには役に立たない)であり、404エラーの場合は変更され、ページには以下の文字が表示されます.
Status Code: 404; Not Found
500エラーでも404エラーでも自分でカスタマイズしたフレンドリーなエラーページを表示したい場合は、どうすればいいですか?500エラーの場合、
app.UseExceptionHandler()
でキャプチャできます.404エラーについては、
app.UseStatusCodePages()
の拡張版app.UseStatusCodePagesWithReExecute()
でキャプチャすることができる.そして対応するURLに渡して処理する.
app.UseExceptionHandler("/errors/500");
app.UseStatusCodePagesWithReExecute("/errors/{0}");
URLルーティングMVC Controlに友好エラーページが表示されます.
public class ErrorsController : Controller
{
[Route("errors/{statusCode}")]
public IActionResult CustomError(int statusCode)
{
if(statusCode == 404)
{
return View("~/Views/Errors/404.cshtml");
}
return View("~/Views/Errors/500.cshtml");
}
}
【更新】その後、最下位の例外が発生した場合、カスタムエラーページが表示されないか、次の例外などの空白が表示されないかという問題が発生しました.
System.DllNotFoundException: Unable to load DLL 'System.Security.Cryptography.Native.Apple': The specified module could not be found.
(Exception from HRESULT: 0x8007007E)
このとき,カスタムエラーページをMVCで表示する限界を考え,発生した異常によりMVC自体が正常に動作しないと,カスタムエラーページが表示されなくなる.そこでこの問題に対して改善を行い、500エラーに対して直接静的ファイルで応答する、Startup.csの
Configure()
のコードは以下の通りです.
app.UseExceptionHandler(errorApp =>
{
errorApp.Run(async context =>
{
context.Response.StatusCode = 500;
if (context.Request.Headers["X-Requested-With"] != "XMLHttpRequest")
{
context.Response.ContentType = "text/html";
await context.Response.SendFileAsync($@"{env.WebRootPath}/errors/500.html");
}
});
});
app.UseStatusCodePagesWithReExecute("/errors/{0}");
カスタムエラーページを再利用するために、MVC Controlで変更されました.
public class ErrorsController : Controller
{
private IHostingEnvironment _env;
public ErrorsController(IHostingEnvironment env)
{
_env = env;
}
[Route("errors/{statusCode}")]
public IActionResult CustomError(int statusCode)
{
var filePath = $"{_env.WebRootPath}/errors/{(statusCode == 404?404:500)}.html";
return new PhysicalFileResult(filePath, new MediaTypeHeaderValue("text/html"));
}
}
まとめ以上、ASPについてです.NET Coreにはカスタマイズエラーページのすべての内容が表示されています.本文の内容は皆さんの勉強や仕事に一定の助けになることを望んでいます.もし疑問があれば、伝言を残して交流してください.