C# 两种控制器方法之间存在歧义

C# 两种控制器方法之间存在歧义,c#,asp.net-mvc,C#,Asp.net Mvc,在我的asp.net mvc4控制器中,我有两种操作方法 public ActionResult Projects() 及 在调试时,当我向第二个方法发送字符串时,我得到一个错误,即当前请求在这两个方法之间不明确 为什么呢,因为它们有不同的方法签名?用动词修饰它们,它们有不同的功能签名,但最重要的是它们有相同的ActionName [HttpGet] public ActionResult Projects() [HttpPost] public ActionResult Projects

在我的asp.net mvc4控制器中,我有两种操作方法

public ActionResult Projects()

在调试时,当我向第二个方法发送字符串时,我得到一个错误,即当前请求在这两个方法之间不明确


为什么呢,因为它们有不同的方法签名?

用动词修饰它们,它们有不同的功能签名,但最重要的是它们有相同的ActionName

[HttpGet]
public ActionResult Projects()


[HttpPost]
public ActionResult Projects(string s)

或者更改其中一个方法的操作名称。MVC不能支持同名的两个操作。。。即使有不同的签名。 唯一的例外是当其中一个动作用不同的动词属性修饰时,如
[HttpPost]

如果HttpPost不适合您。。。您需要更改操作名称


只要检查一下,就有一些替代方法可以帮助您拥有两个同名的操作:

字符串是
可空类型

因此,您的路线将匹配
可选的两种方法

在你的情况下,以下是有效的

/家庭/项目/

/家庭/项目/业务/

所以用不同的名字来装饰

 public ActionResult ProjectBySting(string s)

或者类似于
[HttpPost]/[HttpGet]

的动词,我通常通过路由解决这个问题。您可以使用标准路由将它们移动到不同的控制器来修复它,也可以使用attributerouting.net中的内容。你可以给他们不同的课程名称我不太喜欢路由。。。但你是对的。在我的项目中,我们有60个控制器始终使用标准路由。
 public ActionResult ProjectBySting(string s)