在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节制器内容请搜索剧本之家以前的文章或继承欣赏下面的相关文章但愿各人今后多多支持剧本之家!
您大概感乐趣的文章: