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控制器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
先装了FRAMEWORK,后装IIS导致asp.net页面无法访问的解决方法
如果先装了FRAMEWORK,后装IIS。有可能没有在IIS中注册,就会导致在页面中无法访问的情况2012-01-01
asp.net 页面版文本框智能提示JSCode (升级版)
模拟百度,Google智能提示,非与服务器端交互的,数据源来自已经绑定好的下拉列表。纯客户端脚本 升级版2009-12-12
ASP.NET获取各级目录Server.MapPath详解全
ASP.NET获取各级目录Server.MapPath详解全,需要的朋友可以参考下。2011-12-12
让Silverlight 2.0动画动起来Making Silverlight 2.0 animation Start(
Microsoft Expression Blend 2 制作动画个人感觉倒像3DMAX 可以自动捕捉关键帧2008-11-11
ASP.NET MVC:Filter和Action的执行介绍
ASP.NET MVC之Filter和Action的执行介绍,需要的朋友可以参考2012-11-11


最新评论