ASP.NET Core MVC解决控制器同名Action请求不明确的问题

时间:2021-05-28

在Asp.Net Core MVC Web应用程序的开发过程当中,如果需要在控制器内使用同名的Action,则会出现如下图所示的问题:

https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/routing?view=aspnetcore-5.0
代码片段如下:

` //GET: /HelloWorld/Welcomepublic 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控制器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章