欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談ASP.NETCore統(tǒng)一處理404錯(cuò)誤都有哪些方式

 更新時(shí)間:2022年04月19日 11:50:45   作者:Gui.H  
本文主要介紹了ASP.NETCore統(tǒng)一處理404錯(cuò)誤都有哪些方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

當(dāng)未找到網(wǎng)頁(yè)并且應(yīng)用程序返回 404 錯(cuò)誤時(shí),ASP.NET Core MVC 僅呈現(xiàn)通用瀏覽器錯(cuò)誤頁(yè)面,如下圖所示

這不是很優(yōu)雅,是嗎?我們平時(shí)看到的404頁(yè)面一般是這樣的

還有這樣的

試了下京東,地址不存在的時(shí)候是會(huì)重定向到首頁(yè)

下面就來(lái)演示下ASP.NET Core中如何實(shí)現(xiàn)這種自定義的404頁(yè)面處理。

新建項(xiàng)目 ASP.NET Core MVC(WebApi處理方式也一樣)

新建好的項(xiàng)目直接運(yùn)行的效果

隨便輸入一個(gè)地址 /test404

當(dāng)未找到網(wǎng)頁(yè)并且應(yīng)用程序返回 404 錯(cuò)誤時(shí),ASP.NET Core MVC 僅呈現(xiàn)通用瀏覽器錯(cuò)誤頁(yè)面,如下圖所示

方式一

FallbackEndpointRouteBuilderExtensions.MapFallback

這是個(gè)什么東西?

意思大概是說(shuō)這是注冊(cè)一個(gè)優(yōu)先級(jí)最低的通配路由,來(lái)匹配所有路由,那就來(lái)試試效果吧。

// 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添加一個(gè)Action如下

// HomeController.cs

[Route("{*url}", Order = 9999)]
public IActionResult Page404()
{
    return View();
}

添加對(duì)應(yīng)的View頁(yè)面如下

// Page404.cshtml
@{
    ViewData["Title"] = "404";
}

<div>404 for {*url}</div>

上面兩種方式雖然能夠正常處理404錯(cuò)誤頁(yè),但是在程序內(nèi)部拋出的404錯(cuò)誤卻無(wú)法進(jìn)行攔截

添加一個(gè)測(cè)試Action如下

[Route("/test404")]
public IActionResult test404()
{
    // 一些業(yè)務(wù)處理,最終返回404 
    // return NotFound();
    return StatusCode(404);
}

你看,這種404場(chǎng)景,上述方式?jīng)]能進(jìn)行攔截處理。

方式三

自定義Middleware攔截

代碼如下,關(guān)于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;
});

把方式一和方式二的代碼注釋掉,運(yùn)行測(cè)試效果如下
不存在的地址

存在的地址,但是業(yè)務(wù)上返回404

方式四

UseStatusCodePagesWithReExecute

注釋上個(gè)方法的代碼

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 = "對(duì)不起,請(qǐng)求的資源不存在。";
                  break;
              case 401:
                  ViewBag.msg = "對(duì)不起,您無(wú)權(quán)限訪問(wèn)此頁(yè)面。";
                  break;
              default:
                  ViewBag.msg = "服務(wù)異常,請(qǐng)稍后重試!";
                  break;
          }

          return View("Error404");
      }
  }
// Error404.cshtml
@{
}

<div>@ViewBag.code : @ViewBag.msg</div>

測(cè)試效果

完美!?。?!

方式五 web.config <customErrors> 節(jié)點(diǎn)中配置ASP.NET管道處理404錯(cuò)誤

這是以前framwork時(shí)代的iis配置方式,不推薦使用了,也不進(jìn)行測(cè)試了。

總結(jié)

個(gè)人認(rèn)為方式三、四推薦使用,四更加優(yōu)雅,三是最靈活的,還有沒(méi)有其他方式進(jìn)行攔截統(tǒng)一處理404錯(cuò)誤呢,歡迎補(bǔ)充。

本文源碼已上傳 github

到此這篇關(guān)于淺談ASP.NETCore統(tǒng)一處理404錯(cuò)誤都有哪些方式的文章就介紹到這了,更多相關(guān)ASP.NETCore 404錯(cuò)誤內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

最新評(píng)論