
文章插圖
asp.net core mvc 對應著 .NET Framework 中的 ASP.NET MVC, 前者可以跨平臺,可擴展,高性能,不過令人驚訝的是,雖然 ASP.NET Core 提供了大量的可選項可以完美的處理 404 錯誤,但 ASP.NET Core MVC 在默認情況下并沒有選擇它們,你說奇怪不?
這就造成了當請求一個不存在的頁面時,應用程序將會返回一個 404 錯誤,ASP.NET Core MVC 目前會展示一個瀏覽器通用的錯誤頁,如下圖所示:
這篇文章我準備討論 3種 方式來優(yōu)雅的處理這種 404 錯誤 。
接下來我會在 Visual Studio 2019 中創(chuàng)建一個 ASP.NET Core MVC 項目,用這個項目去展示如何處理 404 錯誤 。
然后把 ASP.NET Core MVC 項目跑起來,你會看到應用程序默認的首頁,上面還帶一行 welcome 的歡迎語,如下圖所示:
接下來我們嘗試在瀏覽器中輸入一個不存在的網址,比如說:http://localhost:6440/welcome, 這時候 ASP.NET Core MVC 引擎將會訪問這個地址的資源,可想而知,引擎肯定會返回一個 404 錯誤,你也會看到如下錯誤頁,通常情況下這是非常讓人難堪的,對吧 。
檢查 ASP.NET Core MVC 的 Response.StatusCode有幾種方式可以比較完美的處理這種默認的 404 錯誤,一個簡單的方案就是去檢查 response 的 http 狀態(tài)碼,一旦發(fā)現這個 status = 404,你可以重定向到一個web 中存在的頁面或者一個特定的錯誤頁,下面的代碼展示了,你可以在 Startup.Configure 方法中進行全局判斷,一旦發(fā)現404錯誤就導向 home 頁面 。
public class Startup{public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.Use(async (context, next) =>{await next();if (context.Response.StatusCode == 404){context.Request.Path = "/Home";await next();}});}}接下來運行web程序,然后鍵入 http://localhost:6440/welcome,你會發(fā)現最終展示了 home 頁面 。
下面是 Configure 方法的完整代碼 。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Home/Error");}app.Use(async (context, next) =>{await next();if (context.Response.StatusCode == 404){context.Request.Path = "/Home";await next();}});app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");});}使用 UseStatusCodePages 中間件第二種可選的解決方案是,采用 ASP.NET Core 中內置的 UseStatusCodePages 中間件,下面的代碼展示了如何在 Startup.Configure 方法中去實現 StatusCodePages。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.UseStatusCodePages();//Other code}現在你可以把程序跑起來然后瀏覽一下這個不存在的資源,下圖展示了這種情況下的輸出結果:
使用 UseStatusCodePagesWithReExecute 中間件你可以利用UseStatusCodePagesWithReExecute 中間件來處理 那種 Response 還沒開始構建 就遇到的一些不成功的狀態(tài),有點繞哈,因此這個中間件不會處理 Response status 等于 404 的情況,當 404 發(fā)生的時候,這個中間件要做的就是將 request 重定向到另外一個 Action 去處理這個錯誤 。
下面的代碼展示了如何使用這個中間件將 request 重定向到另外一個 action 方法 。
app.UseStatusCodePagesWithReExecute("/Home/HandleError/{0}");然后再來看一下被重定向的 Action 方法 。
[Route("/Home/HandleError/{code:int}")]public IActionResult HandleError(int code){ViewData["ErrorMessage"] = $"Error occurred. The ErrorCode is: {code}";return View("~/Views/Shared/HandleError.cshtml");}現在我把展示錯誤信息的 HandleError 視圖的創(chuàng)建留給你去實現吧!
以上關于本文的內容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!
「愛刨根生活網」www.malaban59.cn小編還為您精選了以下內容,希望對您有所幫助:- linux服務器搭建教程 linux服務器搭建實戰(zhàn)詳解
- 狼爸體罰女兒跑步致死:跑步技巧錯誤!
- 服務器搭建方法 租用服務器優(yōu)勢有什么
- 糾正有氧運動的錯誤觀點
- 國內外個人免費云服務器操作方法 私人服務器怎么搭建
- 優(yōu)酷視頻拼團取消方法 阿里云服務器拼團活動
- 同步服務器時間 windows時間同步服務器設置
- 云服務器搭建數據庫方法 阿里云數據庫服務器怎么用
- 阿里云企業(yè)注冊步驟 企業(yè)阿里云服務器如何申請
- 講解windows搭建php環(huán)境 php上傳文件到服務器要求
