我所看到的重载的所有示例通常只有两个具有不同参数的同名的方法,一个使用GET动词,另一个使用POST.同样的方法可以做两次以上的重载吗?
这是我所指的一个例子:Can you overload controller methods in ASP.NET MVC?
解决方法
@H_502_7@ 默认情况下,我不认为您可以使用一个动词重载相同的动作名称.正如您指出的另一个线程,您可以重载方法&然后使用属性来更改映射到该方法的操作,但我猜这不是你要找的.我之前使用过的另一个选项(取决于你的重载是多么复杂/不同)是简单地使用可参数的参数&有效地将您的不同签名合并在一起.所以代替:
public ActionResult DoSomething(int id)... public ActionResult DoSomething(string name)...
只有:
public ActionResult DoSomething(int? id,string? name)
不是最好的解决方案,但如果一个重载只是建立在另一个,那么它不是太糟糕的妥协.
一个最后的选择可能值得一去(我没有尝试过,甚至不知道它是否工作,但逻辑上应该),是写一个ActionMethodSelectorAttribute的实现,该实现将传递的参数进行比较ControllerContext给方法签名&尝试做出最佳匹配(即尝试比默认实现更严格地解决歧义).