AmbiguousMatchException в ActionMethodSelectorAttribute, когда два или более запроса отправляются одновременно - PullRequest
0 голосов
/ 02 января 2019

У меня есть несколько методов действий в контроллере, которые имеют одно и то же 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» неоднозначен между следующими методами действия: .... "

Я получаю эту ошибку, когда:

  1. Я отправляю запрос (который занимает некоторое время) с примером параметра xID.

  2. Пока запрос на шаге 1 все еще обрабатывается на сервере (ответ еще не получен), я отправляю второй запрос (пример параметра yID).

Я обнаружил, что в этих случаях запрос действительно содержит оба параметра; в моем примере xID и yID. Это объясняет ошибку.

Похоже, сервер каким-то образом повторно использует тот же запрос и добавляет параметр из второй отправки.

NB. Пожалуйста, знайте, что я в основном использую методы действий с уникальным именем. Это лучший способ пойти. Но в некоторых случаях описанный пример может быть лучшим подходом.

Как я могу решить и / или избежать этой ошибки?

1 Ответ

0 голосов
/ 03 января 2019

MVC не поддерживает перегрузку метода, основанную исключительно на подписи, поэтому это не удастся:

Тот же вопрос отправлен здесь

Отметьте этот блог для того же примера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...