使用Asp.Net Core MVC时,可用使用以下方法自定义404页面
一、使用 app.Use();中间件,在里面判断返回状态,如果是404,你就可以把他重定向到你需要的页面
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 404)
{
context.Request.Path = "/Error.html";
await next();
}
});
二、使用 app.UseStatusCodePages();中间件,当应用遇到没有正文的 HTTP 400-599 错误状态代码时,它将返回状态代码和空响应正文。
当你直接调用该方法时,响应试例为下面图片。 当然这种方法不太友好,所以通常不在生产中使用。
app.UseStatusCodePages()方法重载中有一个接受lambda的方法,当然这样响应字符串与上面方法无差异。
app.UseStatusCodePages(async context =>
{
context.HttpContext.Response.ContentType = "text/plain";
await context.HttpContext.Response.WriteAsync(
"Status code page, status code: " +
context.HttpContext.Response.StatusCode);
});
但是你可以设置ContentType=“text/html”,这样你的返回内容就使用html来解析。
app.UseStatusCodePages(async context =>
{
context.HttpContext.Response.ContentType = "text/html;charset=utf-8";
await context.HttpContext.Response.WriteAsync(
@"<!DOCTYPE html>
<html>
<head>
<meta name='viewport' content='width=device-width' />
<title>错误页面</title>
</head>
<body>
<div>错误页面</div>
</body>
</html>
");
});
三、使用 app.UseStatusCodePagesWithReExecute();中间件,该中间件可用帮你指向控制器。该配置就是把错误页指向了Error控制器中的Error方法,code就是错误http请求状态码,你可以进行其他路由配置。
app.UseStatusCodePagesWithReExecute("/Error/Error/{0}");
public class ErrorController : Controller
{
[Route("/Error/Error/{code:int}")]
public IActionResult Error(int code)
{
return View();
}
}
如果你想了解更多:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/error-handling?view=aspnetcore-3.1