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

 

转载于:https://www.cnblogs.com/OpenCoder/p/10011338.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
404面2秒内自动跳转到首 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>很抱歉,网站搬新家啦!</title> <style type="text/css"> body {margin: 0px; padding:0px; font-family:"微软雅黑", Arial, "Trebuchet MS", Verdana, Georgia,Baskerville,Palatino,Times; font-size:16px;} div{margin-left:auto; margin-right:auto;} a {text-decoration: none; color: #1064A0;} a:hover {color: #0078D2;} img { border:none; } h1,h2,h3,h4 { /* display:block;*/ margin:0; font-weight:normal; font-family: "微软雅黑", Arial, "Trebuchet MS", Helvetica, Verdana ; } h1{font-size:44px; color:#0188DE; padding:20px 0px 10px 0px;} h2{color:#0188DE; font-size:16px; padding:10px 0px 40px 0px;} #page{width:910px; padding:20px 20px 40px 20px; margin-top:80px;} .button{width:180px; height:28px; margin-left:0px; margin-top:10px; background:#009CFF; border-bottom:4px solid #0188DE; text-align:center;} .button a{width:180px; height:28px; display:block; font-size:14px; color:#fff; } .button a:hover{ background:#5BBFFF;} </style> </head> <body> <div id="page" style="border-style:dashed;border-color:#e4e4e4;line-height:30px;background:url(sorry.png) no-repeat right;"> <h1>腹有诗书气自华~</h1> <h2>言书库,完本小说在线阅读网址 </h2> <meta http-equiv="refresh" content="1.5;url=http://www.yanshuku.com"> <font color="#666666">2秒内,若网未能自动跳转,请点击下面按钮进行跳转!</font><br /><br /> <div class="button"> <a href="http://www.yanshuku.com" title="进入首">立即进入首</a> </div> </div> </body> </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值