日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時(shí)間:2023/12/4 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 ASP.NET Core MVC 5 中处理未知的 Action 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

創(chuàng)建 Controller

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

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

未知 Action 的問題

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

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

/Author/Books? /Author/Articles

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

/Author/Index

回過頭來,如果你在瀏覽器中輸入如下兩個(gè)url,這時(shí)候肯定會拋異常,很顯然 AuthorControler 下并沒有所謂的 Books 和 Articles 這兩個(gè) 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 這個(gè)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 不存在時(shí)將會拋出運(yùn)行時(shí)異常,現(xiàn)在你可以避免這種情況了。

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

總結(jié)

以上是生活随笔為你收集整理的如何在 ASP.NET Core MVC 5 中处理未知的 Action的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。