<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何在 ASP.NET Core MVC 5 中處理未知的 Action?

          共 4462字,需瀏覽 9分鐘

           ·

          2021-03-16 21:44

          ASP.NET Core MVC 5 是一個輕量級,開源的,利于單元測試的基于 ASP.NET Core 運(yùn)行時的 web 框架,在開發(fā)時你肯定會遇到不少那些 request 無法匹配 Action 的情況,通常做法是拋出 404,但有些場景下我希望能收口到統(tǒng)一一個 Action 去執(zhí)行,這篇文章我們將會討論如何去處理那些未知 Action 的收口。

          創(chuàng)建 Controller

          現(xiàn)在我們創(chuàng)建一個 AuthorController 類,如下代碼所示:


              public class AuthorController : Controller
              {
                  [HttpGet]
                  public ActionResult Index()
                  {
                      return View();
                  }
              }

          未知 Action 的問題

          先拋出問題,然后再來看一下怎么解決,假設(shè)現(xiàn)在在做一個 圖書搜索系統(tǒng),你希望用戶可以根據(jù) 作者名書名,文章標(biāo)題 等條件去查詢圖書信息,首先你需要知道目錄所包含的所有作者,書籍,文章的詳細(xì)信息,那么這個需求怎么實(shí)現(xiàn)呢?

          為了實(shí)現(xiàn)需求,我肯定會先在 Views 文件夾下新增對應(yīng)的 view 文件,比如 Authors.cshtml, Books.cshtml, Articles.cshtml,方便用戶查詢時導(dǎo)向各自的 view ,比如下面的請求。


          /Author/Books 
          /Author/Articles

          顯而易見下面的 url 它可以非常利索的導(dǎo)向 AuthorController 下的 Index 方法。


          /Author/Index

          回過頭來,如果你在瀏覽器中輸入如下兩個url,這時候肯定會拋異常,很顯然 AuthorControler 下并沒有所謂的 Books 和 Articles 這兩個 Action 方法。


          /Author/Books
          /Author/Articles

          使用 routing 處理未知 Action

          那如何對這些未知 Action 進(jìn)行收口呢?可以使用 Routing 機(jī)制來解決此類問題,如下代碼所示:


                  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
                  {
                      app.UseStaticFiles();

                      app.UseRouting();

                      app.UseAuthorization();

                      app.UseEndpoints(endpoints =>
                      {
                          endpoints.MapControllerRoute(
                                   name: "viewName",
                                   pattern: "{controller}/{*viewName}",
                                   defaults: new { action = "DisplayAnyView" });
                      });
                  }

          上面代碼的意思是,使用視圖名 (*viewName) 來匹配 Action,如果能找到對應(yīng)的 Action 則可以進(jìn)行渲染,如何找不到就默認(rèn)跳到 DisplayAnyView 這個Action上,下面是 DisplayAnyView 方法的實(shí)現(xiàn)。


          public IActionResult DisplayAnyView(string viewName)
          {
             return View(viewName);
          }

          完整的 AuthorController 代碼如下:


              public class AuthorController : Controller
              {
                  [HttpGet]
                  public ActionResult Index()
                  {
                      return View();
                  }
                  public IActionResult DisplayAnyView(string viewName)
                  {
                      return View(viewName);
                  }
              }

          接下來把程序跑起來后,輸入:http://localhost:32172/Author/Books  , 你會觀察到 DisplayAnyView 方法中的斷點(diǎn)被成功命中,如下圖所示:

          Action 是 Controller 下的 public & non-static 方法,它可以有效的將 request 請求匹配到對應(yīng)的 action 上,然而當(dāng) request 所匹配的 action 不存在時將會拋出運(yùn)行時異常,現(xiàn)在你可以避免這種情況了。

          譯文鏈接:https://www.infoworld.com/article/3600794/how-to-handle-unknown-actions-in-aspnet-core-mvc-5.html


          回復(fù) 【關(guān)閉】學(xué)關(guān)
          回復(fù) 【實(shí)戰(zhàn)】獲取20套實(shí)戰(zhàn)源碼
          回復(fù) 【被刪】學(xué)
          回復(fù) 【訪客】學(xué)
          回復(fù) 【小程序】學(xué)獲取15套【入門+實(shí)戰(zhàn)+賺錢】小程序源碼
          回復(fù) 【python】學(xué)微獲取全套0基礎(chǔ)Python知識手冊
          回復(fù) 【2019】獲取2019 .NET 開發(fā)者峰會資料PPT
          回復(fù) 【加群】加入dotnet微信交流群

          技巧:微信可以設(shè)置雪花昵稱了!


          臥槽:微信又能免費(fèi)提現(xiàn)了!



          瀏覽 54
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美乱妇高清无乱码 | 日本A V免费观看电影大全 | 久久手机观看 | 三级片无码在线播放 | 欧美黄A片免费视频www |