我有两种行动方法:
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)方法然后调试,仍然是同样的事情。其他测试运行正常,任何帮助表示赞赏。
答案 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达到第二种方法。