使用相同的动词重载asp.net MVC控制器方法?

时间:2009-07-17 06:16:03

标签: asp.net-mvc

我看到的所有重载示例通常只有两个具有不同参数的同名方法,一个使用GET动词而另一个使用POST。是否可以在同一个方法上执行两次或更多次重载,所有这些都使用相同的动词?

以下是我所指的例子:Can you overload controller methods in ASP.NET MVC?

2 个答案:

答案 0 :(得分:8)

默认情况下,我认为您不能使用一个动词重载相同的操作名称。正如你指出的那个其他主题所说,你可以重载方法&然后使用一个属性来改变映射到方法的动作,但我猜这不是你想要的。

我以前使用过的另一个选项(取决于你的重载程度有多复杂/不同)是简单地为参数&使用可空值。有效地将您的不同签名合并在一起。所以而不是:

public ActionResult DoSomething(int id)...
public ActionResult DoSomething(string name)...

只有:

public ActionResult DoSomething(int? id, string? name)

不是最好的解决方案,但如果一个重载只是建立在另一个上,那么它的妥协就不会太糟糕了。

可能值得一试的最后一个选项(我没有尝试过,甚至不知道它是否可行,但逻辑上应该如此),是编写{{1}的实现}将ActionMethodSelectorAttribute中传递的参数与方法签名&尝试进行最佳匹配(即尝试比默认实现更严格地解决歧义)。

答案 1 :(得分:0)

我猜不是。因为我发现MVC框架并不真正关心你放在参数列表中的内容,例如,我的行为就像:

public ActionResult Index(int id) {...}

可以这样请求:Domain.com/Index.aspx 或Domain.com/Index.aspx?id=012901 甚至是Domain.com/Index.aspx?login=938293

由于编程语言中的重载意味着您​​使用输入参数选择不同的函数(具有相同的名称),但在这种情况下MVC并不关心它!所以除了ActionVerb重载之外,我认为不行。