ASP.NET Core 如何实现404错误跳转到主页

假如用户在Web浏览器上敲错了URL,访问了ASP.NET Core站点下一个不存在的URL地址,那么默认情况下ASP.NET Core会返回给浏览器著名的404错误,那么有什么办法可以让ASP.NET Core返回404的Http状态码时,自动跳转到主页吗?

使用ASP.NET Core的中间件(Middleware)即可。

首先我们定义一个叫Jump404Middleware的中间件类,用于处理一旦ASP.NET Core的Pipeline返回404响应状态码,就跳转到网站主页:

public class Jump404Middleware
{
private readonly RequestDelegate next; public Jump404Middleware(RequestDelegate next)
{
this.next = next;
} public async Task Invoke(
Microsoft.AspNetCore.Http.HttpContext context)
{
await next.Invoke(context); var response = context.Response; //如果是404就跳转到主页
if (response.StatusCode == )
{
response.Redirect("/");
}
}
}

注意检测Response状态码(是否为404)和Redirect跳转的逻辑都是写在await next.Invoke(context)之后的。

然后定义一个Jump404Middleware中间件的扩展类Jump404MiddlewareExtension:

public static class Jump404MiddlewareExtension
{
public static void UseJump404(this IApplicationBuilder app)
{
app.UseMiddleware<Jump404Middleware>();
}
}

最后在ASP.NET Core中Startup类的Configure方法中使用Jump404Middleware中间件即可:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
} app.UseStaticFiles(); app.UseJump404(); app.UseCookiePolicy(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}

这样当用户在Web浏览器上敲错了URL,访问了ASP.NET Core站点下一个不存在的URL地址时,ASP.NET Core就不会返回404错误了,而是将用户浏览器的URL地址跳转到网站主页上,避免了报错,其实现在很多大型网站(京东、淘宝等)都实现了这个功能。

上一篇:前端如何在h5页面调用微信支付?


下一篇:读生产环境下go语言最佳实践有感