你可以在ASP.NET MVC中重载控制器方法吗?

我很好奇你是否可以在ASP.NET MVC中重载控制器方法。 每当我尝试,我都会得到下面的错误。 这两种方法接受不同的论点。 这是不能做到的吗?

当前在控制器类型“MyController”上的操作“MyMethod”请求在以下操作方法之间不明确:


如果你想让代码重载,你可以使用这个属性。

[ActionName("MyOverloadedName")]

但是,你必须为同一个http方法使用不同的动作名称(正如其他人所说的那样)。 所以这只是语义。 你想在你的代码或你的属性中拥有这个名字吗?

Phil有一篇与此相关的文章:http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx


是。 我已经能够通过将每个控制器方法的HttpGet / HttpPost (或等价的AcceptVerbs属性)设置为不同的东西,即HttpGetHttpPost ,但不是两者。 这样它可以根据请求的类型来判断使用哪种方法。

[HttpGet]
public ActionResult Show()
{
   ...
}

[HttpPost]
public ActionResult Show( string userName )
{
   ...
}

我的一个建议是,对于这种情况,应该有一个私有实现,这两个公共Action方法都依赖它来避免重复代码。


这是你可以做的其他事情......你需要一个能够有一个参数而不是一个参数的方法。

为什么不试试这个...

public ActionResult Show( string username = null )
{
   ...
}

这对我来说很有效......在这个方法中,你可以测试你是否有传入的参数。


已更新,以删除字符串上无效的可空语法并使用默认参数值。

链接地址: http://www.djcxy.com/p/48123.html

上一篇: Can you overload controller methods in ASP.NET MVC?

下一篇: How to determine the represented type of enum value?