我看到的所有重载示例通常只有两个具有不同参数的同名方法,一个使用GET动词而另一个使用POST。是否可以在同一个方法上执行两次或更多次重载,所有这些都使用相同的动词?
以下是我所指的例子:Can you overload controller methods in ASP.NET MVC?
答案 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重载之外,我认为不行。