• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
PowerCoder
博客园    首页    新随笔    联系   管理    订阅  订阅

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 == 404)
        {
            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地址跳转到网站主页上,避免了报错,其实现在很多大型网站(京东、淘宝等)都实现了这个功能。

 

posted @ 2018-11-24 10:58  PowerCoder  阅读(3617)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3