同时提交两个或多个请求时,ActionMethodSelectorAttribute中的AmbiguousMatchException

时间:2019-01-02 08:55:00

标签: c# asp.net-mvc model-view-controller

我在Controller中有多个具有相同ActionName的action方法,例如:

[ActionName("Example")]
[DefinedParameter(Name = "xID")]
[HttpPost()]
public ActionResult ExampleX(Guid xID)
{
    ....
}

[ActionName("Example")]
[DefinedParameter(Name = "yID")]
[HttpPost()]
public ActionResult ExampleY(Guid yID)
{
    ....
}

除此之外,我还可以通过DefinedParameter属性使用动作选择器,如下所示:

public class DefinedParameterAttribute : ActionMethodSelectorAttribute
{
    public string Name { get; set; }

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        HttpRequestBase request = controllerContext.RequestContext.HttpContext.Request;
        return request[this.Name] != null;
    }
}

在大多数情况下,这很完美。

但是在某些情况下,我会遇到以下错误:

“ AmbiguousMatchException     异常消息:在以下操作方法之间,当前对控制器类型“ ExampleController”的操作“ Example”的请求不明确:....“

在以下情况下出现此错误:

  1. 我使用示例参数xID提交了一个请求(需要一些时间)。

  2. 虽然步骤1的请求仍在服务器上处理(尚未返回响应),但我提交了第二个请求(示例参数yID)。

我发现,在这些情况下,请求确实包含两个参数。在我的示例中,xID和yID。这说明了错误。

因此,服务器似乎以某种方式重用了相同的请求并从第二个提交中添加了参数。

注意:请注意,我主要使用具有唯一名称的操作方法。那是最好的方法。但是在某些情况下,所描述的示例可能是更好的方法。

如何解决和/或避免此错误?

1 个答案:

答案 0 :(得分:0)

MVC不支持仅基于签名的方法重载,因此将失败:

同一问题发布了here

在同一示例中选中此blog