亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

asp.NET core mvc 對應著 .NET Framework 中的 ASP.NET MVC, 前者可以跨平臺,可擴展,高性能,不過令人驚訝的是,雖然 ASP.NET Core 提供了大量的可選項可以完美的處理 404 錯誤,但 ASP.NET Core MVC 在默認情況下并沒有選擇它們,你說奇怪不?

這就造成了當請求一個不存在的頁面時,應用程序將會返回一個 404 錯誤,ASP.NET Core MVC 目前會展示一個瀏覽器通用的錯誤頁,如下圖所示:

如何在 ASP.NET Core 中處理 404 錯誤

這篇文章我準備討論 3種 方式來優雅的處理這種 404 錯誤。

接下來我會在 Visual Studio 2019 中創建一個 ASP.NET Core MVC 項目,用這個項目去展示如何處理 404 錯誤。

然后把 ASP.NET Core MVC 項目跑起來,你會看到應用程序默認的首頁,上面還帶一行 welcome 的歡迎語,如下圖所示:

如何在 ASP.NET Core 中處理 404 錯誤

接下來我們嘗試在瀏覽器中輸入一個不存在的網址,比如說:http://localhost:6440/welcome, 這時候 ASP.NET Core MVC 引擎將會訪問這個地址的資源,可想而知,引擎肯定會返回一個 404 錯誤,你也會看到如下錯誤頁,通常情況下這是非常讓人難堪的,對吧。

如何在 ASP.NET Core 中處理 404 錯誤

檢查 ASP.NET Core MVC 的 Response.StatusCode

有幾種方式可以比較完美的處理這種默認的 404 錯誤,一個簡單的方案就是去檢查 response 的 http 狀態碼,一旦發現這個 status = 404,你可以重定向到一個web 中存在的頁面或者一個特定的錯誤頁,下面的代碼展示了,你可以在 Startup.Configure 方法中進行全局判斷,一旦發現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,你會發現最終展示了 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
        }

現在你可以把程序跑起來然后瀏覽一下這個不存在的資源,下圖展示了這種情況下的輸出結果:

如何在 ASP.NET Core 中處理 404 錯誤

使用 UseStatusCodePagesWithReExecute 中間件

你可以利用 UseStatusCodePagesWithReExecute 中間件來處理 那種 Response 還沒開始構建 就遇到的一些不成功的狀態,有點繞哈,因此這個中間件不會處理 Response status 等于 404 的情況,當 404 發生的時候,這個中間件要做的就是將 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 視圖的創建留給你去實現吧!

最后,你可能想為一些錯誤碼創建一些特定的view,比如說,你可以創建 Home/Error/500.cshtml 或者 Home/Error/404.cshtml 視圖,然后根據 http status code 的值重定向到合適的錯誤頁。

另外一種處理 404 錯誤的方式是使用一個自定義的頁面,然后在頁面上設置一些特定的錯誤代碼,這樣也方便隱藏一些比較重要的信息,比如將 404 改成 服務壓力大,請聯系管理員 等等,一旦應用程序發生錯誤,你可以將用戶導向你設置的錯誤頁,然后展示你設置的錯誤信息。

分享到:
標簽:NET
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定