欢迎光临
我的个人博客网站

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

在Asp.Net Core MVC Web应用程序的开发过程当中,如果需要在控制器内使用同名的Action,则会出现如下图所示的问题:
ASP.NET Core MVC-解决控制器同名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-解决控制器同名Action请求不明确的问题

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

赞(0) 打赏
未经允许不得转载:张拓的天空 » ASP.NET Core MVC-解决控制器同名Action请求不明确的问题
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专业的IT技术经验分享 更专业 更方便

联系我们本站主机

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏