ASP.NET Core统一处理404错误的方式有哪些?

dotnet之美.领略dotnet之美!当未找到网页并且应用程序返回 404 错误时,ASP.NET Core MVC 仅呈现通用浏览器错误页面,如下图所示这不

大家好,感谢邀请,今天来为大家分享一下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处理方式也一样)

ASP.NET Core统一处理404错误的方式有哪些?

新建好的项目直接运行的效果

在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场景下,上面的方法没能拦截到。

方式二 自定义通配路由

ASP.NET Core统一处理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配置方法。不再推荐,也不会进行测试。

用户评论

ASP.NET Core统一处理404错误的方式有哪些?
◆残留德花瓣

我觉得 ASP.NET Core 统一处理 404 错误其实蛮有必要的,因为遇到这样的情况用户体验直接影响网站的口碑嘛!

    有14位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
傲世九天

我之前用过 middleware 来处理 404 错误,简单明了,而且可以根据不同的情况返回不同的错误页面。很适合快速开发场景。

    有6位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
巷雨优美回忆

这篇文章说的不错,特别是关于自定义异常过滤器这个方法我很感兴趣,看来以后可以尝试一下!

    有9位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
尘埃落定

看了这篇文章我有些困惑,感觉那么多方式各有优缺点,不知道哪种最合适实际项目啊?有没有什么经验分享能参考?

    有17位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
ˉ夨落旳尐孩。

总觉得用 middleware 处理 404 错误太简单了,没有足够的空间进行逻辑处理。自定义异常过滤器看起来更灵活些,可以根据具体情况返回不同的页面和信息。

    有9位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
鹿叹

对于我来说,选择哪种方式主要看项目的规模和需求,小项目可以用 middleware 处理,大项目的话还是考虑一下自定义控制器或异常过滤器效果更好

    有18位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
爱到伤肺i

统一处理 404 错误确实能提升网站用户体验,这样就能避免用户在出现错误页面时感到困惑或者沮丧了。建议大家重视这个问题!

    有16位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
一尾流莺

文章讲解得挺清晰的,尤其是代码示例很易于理解,让我对不同处理方法有了更深刻的认识。

    有11位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
琴断朱弦

我之前用的方式是直接在 Default.cshtml 捕获错误并返回自定义的“404页面”。不过看了这篇文章后觉得自定义异常过滤器似乎更有优势,应该试一下!

    有10位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
面瘫脸

我觉得文章内容还是比较全面的,涵盖了大部分常见的方法,虽然我没有具体实践过,但是理论上理解得还不错。

    有19位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
夏以乔木

对于大型项目来说,建议尽量避免过度依赖中间件,自定义处理404页面会更加灵活和有效,能更好地控制错误信息展示。此外,还可以根据不同类型的错误返回不同的页面,提升用户体验,例如将 401 错误页面引导至登录界面。

    有17位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
←极§速

这篇文章真是太棒了!它让我对 ASP.NET Core 统一处理 404 错误有了更深入的了解。我之前从未想过这个问题,直到现在才意识到它的重要性。我一定会利用这些知识来改进我的项目。

    有10位网友表示赞同!

ASP.NET Core统一处理404错误的方式有哪些?
南初

虽然文章内容详细,但我还是覺得有些地方不够具体。例如,自定义异常过滤器如何实现具体的错误处理逻辑?希望作者能提供更多代码示例以及实践经验分享。

    有10位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/109414.html

(0)
小su's avatar小su
上一篇 2024年8月30日 下午1:32
下一篇 2024年8月30日 下午1:35

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注