在运行时未从测试中找到重载的操作方法

时间:2014-05-23 21:11:52

标签: asp.net-mvc asp.net-mvc-4 c#-4.0 visual-studio-2012

我有两种行动方法:

 public ActionResult Edit(int id)
 { 
 }
 public ActionResult Edit(Modelname model, string[] strParam)
 {
 }

我从单元测试中调用Edit(Modelname,string [])。

var actionResult = controller.Edit(model, strParam);

代码在运行时编译,但是当我调试测试方法时,它给了我一个找不到“MissingMethodException”的方法。我尝试评论Edit(int id)方法然后调试,仍然是同样的事情。其他测试运行正常,任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您的控制器中的操作方法存在模糊匹配。虽然它可以编译得很好,但ASP.NET MVC无法决定在运行时使用哪种方法,它会引发异常。您需要确保它们响应不同类型的HTTP请求或重命名其中一个。

我无法确定您提供的信息,但如果第二种方法正在处理POST请求,则使用HttpPost过滤器将解决问题:

public ActionResult Edit(int id)
{ 
}

[HttpPost]
public ActionResult Edit(Modelname model, string[] strParam)
{
}

如果不是这样,重命名是另一种解决方案。如果您有充分的理由不这样做,ASP.NET MVC提供ActionName过滤器来覆盖ASP.NET MVC管道的方法名称:

public ActionResult Edit(int id)
{ 
}

[ActionName("EditModel")]
public ActionResult Edit(Modelname model, string[] strParam)
{
}

这将使http://example.org/controller/EditModel达到第二种方法。