<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
當未找到網頁並且應用程式返回 404 錯誤時,ASP.NET Core MVC 僅呈現通用瀏覽器錯誤頁面,如下圖所示
這不是很優雅,是嗎?我們平時看到的404頁面一般是這樣的
還有這樣的
試了下京東,地址不存在的時候是會重定向到首頁
下面就來演示下ASP.NET Core中如何實現這種自定義的404頁面處理。
新建專案 ASP.NET Core MVC(WebApi處理方式也一樣)
新建好的專案直接執行的效果
隨便輸入一個地址 /test404
當未找到網頁並且應用程式返回 404 錯誤時,ASP.NET Core MVC 僅呈現通用瀏覽器錯誤頁面,如下圖所示
FallbackEndpointRouteBuilderExtensions.MapFallback
這是個什麼東西?
意思大概是說這是註冊一個優先順序最低的通配路由,來匹配所有路由,那就來試試效果吧。
// Program.cs app.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();
試試效果如下
在HomeController
新增一個Action如下
// HomeController.cs [Route("{*url}", Order = 9999)] public IActionResult Page404() { return View(); }
新增對應的View頁面如下
// Page404.cshtml @{ ViewData["Title"] = "404"; } <div>404 for {*url}</div>
上面兩種方式雖然能夠正常處理404錯誤頁,但是在程式內部丟擲的404錯誤卻無法進行攔截
新增一個測試Action如下
[Route("/test404")] public IActionResult test404() { // 一些業務處理,最終返回404 // return NotFound(); return StatusCode(404); }
你看,這種404場景,上述方式沒能進行攔截處理。
自定義Middleware攔截
程式碼如下,關於Middleware如何使用這裡不做介紹
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 from Middleware")); } return res; });
把方式一和方式二的程式碼註釋掉,執行測試效果如下
不存在的地址
存在的地址,但是業務上返回404
UseStatusCodePagesWithReExecute
註釋上個方法的程式碼
app.UseStatusCodePagesWithReExecute("/error/{0}");
// HomeController.cs [Route("test401")] public IActionResult test401() { return StatusCode(401); }
public class ErrorController : Controller { [Route("error/404", Order = 9)] public IActionResult Error404() { ViewBag.code = 404; return View(); } [Route("error/{code:int}", Order = 1)] public IActionResult Error(int code) { ViewBag.code = code; switch (code) { case 404: ViewBag.msg = "對不起,請求的資源不存在。"; break; case 401: ViewBag.msg = "對不起,您無許可權存取此頁面。"; break; default: ViewBag.msg = "服務異常,請稍後重試!"; break; } return View("Error404"); } }
// Error404.cshtml @{ } <div>@ViewBag.code : @ViewBag.msg</div>
測試效果
完美!!!!
這是以前framwork時代的iis設定方式,不推薦使用了,也不進行測試了。
個人認為方式三、四推薦使用,四更加優雅,三是最靈活的,還有沒有其他方式進行攔截統一處理404錯誤呢,歡迎補充。
本文原始碼已上傳 github
到此這篇關於淺談ASP.NETCore統一處理404錯誤都有哪些方式的文章就介紹到這了,更多相關ASP.NETCore 404錯誤內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45