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

  • 相关阅读:
    laravel 同数据表字段比较查询和状态不正规排序
    laravel 集合
    laravel使用when搜索遇到状态参数(有0的状态)的坑
    laravel 列表搜索查询(when,with用法以及关联图像id处理图像路径)
    laravel 容器注入的坑
    PHP按符号截取字符串的指定部分
    php实现备份数据库
    数据类型 类型检测
    sublime
    vue 使用过程中自己遇到的bug
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/10011338.html
Copyright © 2011-2022 走看看