У меня есть несколько методов действий в контроллере, которые имеют одно и то же ActionName, например:
[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» неоднозначен между следующими методами действия: .... "
Я получаю эту ошибку, когда:
Я отправляю запрос (который занимает некоторое время) с примером параметра xID.
Пока запрос на шаге 1 все еще обрабатывается на сервере (ответ еще не получен), я отправляю второй запрос (пример параметра yID).
Я обнаружил, что в этих случаях запрос действительно содержит оба параметра; в моем примере xID и yID. Это объясняет ошибку.
Похоже, сервер каким-то образом повторно использует тот же запрос и добавляет параметр из второй отправки.
NB. Пожалуйста, знайте, что я в основном использую методы действий с уникальным именем. Это лучший способ пойти. Но в некоторых случаях описанный пример может быть лучшим подходом.
Как я могу решить и / или избежать этой ошибки?