ASP.NET Core MVC解決控制器同名Action請求不明確的問題
在Asp.Net Core MVC Web應用程序的開發過程當中,如果需要在控制器內使用同名的Action,則會出現如下圖所示的問題:
https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/routing?view=aspnetcore-5.0
代碼片段如下:
` //GET: /HelloWorld/Welcome public string Welcome() { return "這是HelloWorld控制器下的Welcome Action方法....."; }
//帶參數的Action //GET: /HelloWorld/Welcome?name=xxxx&type=xxx public string Welcome(string name, int type) { //使用Http Verb謂詞特性路由模板配置解決請求Action不明確的問題 //AmbiguousMatchException: The request matched multiple endpoints. Matches: //[Controller]/[ActionName]/[Parameters] //中文字符串需要編碼 //type為可解析為int類型的數字字符串 string str = HtmlEncoder.Default.Encode($"Hello {name}, Type is: {type}"); return str; }`
隻要在瀏覽器的Url地址欄輸入”/HelloWorld/Welcome”這個路由地址段時,Asp.Net Core的路由解析中間件便拋出上圖所示的請求操作不明確的問題。
根據官方文檔的描述,可以在控制器內某一個同名的Action方法上添加HTTP Verb Attribute特性的方式(為此方法重新聲明一個路由Url片段)來解決此問題。對HelloWorld控制器內,具有參數的”Welcome”這個Action添加HTTPGetAttr
修改後的代碼如下:
//帶參數的Action //GET: /HelloWorld/Welcome?name=xxxx&type=xxx [HttpGet(template:"{controller}/WelcomeP", Name = "WelcomeP")] public string Welcome(string name, int type) { string str = HtmlEncoder.Default.Encode($"Hello {name}, Type is: {type}"); return str; }
請求Url: Get -> “/HelloWorld/Welcome?name=xxxxx&type=0”
到此這篇關於ASP.NET Core MVC解決控制器同名Action請求不明確的問題的文章就介紹到這瞭,更多相關ASP.NET Core MVC控制器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 詳解如何在ASP.NET Core中使用Route特性
- ASP.NET Core中如何實現重定向詳解
- Asp.Net Core中創建多DbContext並遷移到數據庫的步驟
- 詳解如何在ASP.NET Core Web API中以三種方式返回數據
- java實現在普通類中註入service或mapper