大家好,感谢邀请,今天来为大家分享一下ASP.NET Core统一处理404错误的方式有哪些?的问题,以及和的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
当未找到网页并且应用程序返回 404 错误时,ASP.NET Core MVC 仅呈现通用浏览器错误页面,如下图所示
这不是很优雅,是吗?
我们平时看到的404页面一般是这样的
还有这样的
试了下京东,地址不存在的时候是会重定向到首页
下面就来演示下ASP.NET Core中如何实现这种自定义的404页面处理。
010-1 010 ASP.NET Core MVC 仅在找不到网页且应用程序返回4 时呈现一般浏览器错误04错误页面,如下图
这是什么?
大概意思是注册了一条优先级最低的通配符路由来匹配所有路由,我们来试试效果。
//Program.csapp.UseAuthorization();app.MapControllerRoute( name: ‘default’,pattern: ‘{controller=Home}/{action=Index}/{id?}’);app.MapFallback(async (ctx)={ ctx.Response.Body.Write(Encoding.UTF8.GetBytes(‘404 from Fallback’));});app.Run();
新建项目 ASP.NET Core MVC(WebApi处理方式也一样)
新建好的项目直接运行的效果
在HomeController 中添加一个Action 如下
//HomeController.cs[Route(‘{*url}’, Order=9999)]public IActionResult Page404(){ return View();}
添加对应的View页面如下
//Page404.cshtml@{ ViewData[‘Title’]=’404′;}div404 为{*url}/div
随便输入一个地址 /test404
试试效果如下
添加测试Action如下
[Route(‘/test404’)]public IActionResult test404(){ //一些业务处理,最终返回404 //return NotFound();返回状态代码(404);}
你看,在这个404场景下,上面的方法没能拦截到。
方式二 自定义通配路由
代码如下。如何使用中间件这里就不介绍了。
app.Use((context, next)={ var res=next(context); if (context.Response.StatusCode==404) { context.Response.StatusCode=200; context.Response.Body.Write(Encoding.UTF8 .GetBytes(‘来自中间件的404’)); } 返回res;});
注释掉方法一和方法二中的代码,运行测试结果如下:地址不存在
地址存在,但业务返回404
效果图
注释掉上一个方法的代码
app.UseStatusCodePagesWithReExecute(‘/error/{0}’);//HomeController.cs[Route(‘test401’)]public IActionResult test401(){ return StatusCode(401);} public class ErrorController : Controller { [Route(‘)错误/404’,订单=9)] 公共IActionResult Error404() { ViewBag.code=404;返回视图(); } [Route(‘error/{code:int}’, Order=1)] public IActionResult Error(int code ) { ViewBag.code=code; switch (code) { case 404: ViewBag.msg=’抱歉,请求的资源不存在。 ‘;休息; case 401: ViewBag.msg=’抱歉,您没有访问此页面的权限。 ‘;休息; default: ViewBag.msg=’服务异常,请稍后重试! ‘;休息; return View(‘Error404’); } }//Error404.cshtml@{}div@ViewBag.code : @ViewBag.msg/div
上面两种方式虽然能够正常处理404错误页,但是在程序内部抛出的404错误却无法进行拦截
完美!
方式三 自定义Middleware拦截
这是之前framwork时代的IIS配置方法。不再推荐,也不会进行测试。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/109414.html
用户评论
◆残留德花瓣
我觉得 ASP.NET Core 统一处理 404 错误其实蛮有必要的,因为遇到这样的情况用户体验直接影响网站的口碑嘛!
有14位网友表示赞同!
傲世九天
我之前用过 middleware 来处理 404 错误,简单明了,而且可以根据不同的情况返回不同的错误页面。很适合快速开发场景。
有6位网友表示赞同!
巷雨优美回忆
这篇文章说的不错,特别是关于自定义异常过滤器这个方法我很感兴趣,看来以后可以尝试一下!
有9位网友表示赞同!
尘埃落定
看了这篇文章我有些困惑,感觉那么多方式各有优缺点,不知道哪种最合适实际项目啊?有没有什么经验分享能参考?
有17位网友表示赞同!
ˉ夨落旳尐孩。
总觉得用 middleware 处理 404 错误太简单了,没有足够的空间进行逻辑处理。自定义异常过滤器看起来更灵活些,可以根据具体情况返回不同的页面和信息。
有9位网友表示赞同!
鹿叹
对于我来说,选择哪种方式主要看项目的规模和需求,小项目可以用 middleware 处理,大项目的话还是考虑一下自定义控制器或异常过滤器效果更好
有18位网友表示赞同!
爱到伤肺i
统一处理 404 错误确实能提升网站用户体验,这样就能避免用户在出现错误页面时感到困惑或者沮丧了。建议大家重视这个问题!
有16位网友表示赞同!
一尾流莺
文章讲解得挺清晰的,尤其是代码示例很易于理解,让我对不同处理方法有了更深刻的认识。
有11位网友表示赞同!
琴断朱弦
我之前用的方式是直接在 Default.cshtml 捕获错误并返回自定义的“404页面”。不过看了这篇文章后觉得自定义异常过滤器似乎更有优势,应该试一下!
有10位网友表示赞同!
面瘫脸
我觉得文章内容还是比较全面的,涵盖了大部分常见的方法,虽然我没有具体实践过,但是理论上理解得还不错。
有19位网友表示赞同!
夏以乔木
对于大型项目来说,建议尽量避免过度依赖中间件,自定义处理404页面会更加灵活和有效,能更好地控制错误信息展示。此外,还可以根据不同类型的错误返回不同的页面,提升用户体验,例如将 401 错误页面引导至登录界面。
有17位网友表示赞同!
←极§速
这篇文章真是太棒了!它让我对 ASP.NET Core 统一处理 404 错误有了更深入的了解。我之前从未想过这个问题,直到现在才意识到它的重要性。我一定会利用这些知识来改进我的项目。
有10位网友表示赞同!
南初
虽然文章内容详细,但我还是覺得有些地方不够具体。例如,自定义异常过滤器如何实现具体的错误处理逻辑?希望作者能提供更多代码示例以及实践经验分享。
有10位网友表示赞同!