日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

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

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

這就造成了當(dāng)請求一個不存在的頁面時,應(yīng)用程序?qū)祷匾粋€ 404 錯誤,ASP.NET Core MVC 目前會展示一個瀏覽器通用的錯誤頁,如下圖所示:

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

這篇文章我準(zhǔn)備討論 3種 方式來優(yōu)雅的處理這種 404 錯誤。

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

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

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

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

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

檢查 ASP.NET Core MVC 的 Response.StatusCode

有幾種方式可以比較完美的處理這種默認(rèn)的 404 錯誤,一個簡單的方案就是去檢查 response 的 http 狀態(tài)碼,一旦發(fā)現(xiàn)這個 status = 404,你可以重定向到一個web 中存在的頁面或者一個特定的錯誤頁,下面的代碼展示了,你可以在 Startup.Configure 方法中進(jìn)行全局判斷,一旦發(fā)現(xiàn)404錯誤就導(dǎo)向 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();
                }
            });
        }
    }

接下來運(yùn)行web程序,然后鍵入 http://localhost:6440/welcome,你會發(fā)現(xiàn)最終展示了 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 中內(nèi)置的 UseStatusCodePages 中間件,下面的代碼展示了如何在 Startup.Configure 方法中去實(shí)現(xiàn) StatusCodePages 。


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseStatusCodePages();
            //Other code
        }

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

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

使用 UseStatusCodePagesWithReExecute 中間件

你可以利用 UseStatusCodePagesWithReExecute 中間件來處理 那種 Response 還沒開始構(gòu)建 就遇到的一些不成功的狀態(tài),有點(diǎn)繞哈,因此這個中間件不會處理 Response status 等于 404 的情況,當(dāng) 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");
}

現(xiàn)在我把展示錯誤信息的 HandleError 視圖的創(chuàng)建留給你去實(shí)現(xiàn)吧!

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

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

分享到:
標(biāo)簽:NET
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定