ASP.NET MVC Текущий запрос для X неоднозначен - PullRequest
0 голосов
/ 18 февраля 2019

Я получаю следующее исключение при попытке входа в систему:

The current request for action 'Login' on controller type 'AccountController' is ambiguous between the following action methods:
System.Web.Mvc.ActionResult Login() on type Sandbox.Web.Controllers.AccountController
System.Web.Mvc.ActionResult Login(Sandbox.Web.Models.Account.LoginModel) on type Sandbox.Web.Controllers.AccountController

Хорошо, я знаю, что это значит, но я не понимаю, почему я получаю это (только) при входе в систему.Мой код входа был построен, как и все мои другие действия

public class AccountController : Controller
{
    // ctor...

    [AllowAnonymous]
    public ActionResult Login()
    {
       // ...
    }

    [AllowAnonymous]
    [HttpPost]
    public ActionResult Login(LoginModel model)
    {
       // ...
    }
}

Другие мои действия созданы как

ActionResult Create()
[HttpPost]
ActionResult Create(OrderModel model)

ActionResult Edit(int id)
[HttpPost]
ActionResult Edit(OrderModel model)

, и они работают без проблем.

Я используюAutofac 4.9 с Autofac.Integration.Mvc (4.0) в приложении MVC 5.2.7.Единственная часть, которую я изменил из шаблона MVC по умолчанию, - это средство разрешения зависимостей

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

Если я поставлю [HttpGet] перед Login(), все будет работать хорошо.

Любой, у кого есть идеи о том, какзаставить это работать или почему это не работает?

1 Ответ

0 голосов
/ 19 февраля 2019

Когда вы запрашиваете страницу входа, это запрос Get, который в настоящее время имеет только 1 возможный метод, потому что другой метод украшен HttpPost.Поэтому запрос страницы входа в систему не является неоднозначным.

Когда вы отправляете форму входа в систему, это становится запросом Post.Поскольку есть метод, помеченный как HttpPost, и открытый метод, который не помечен как NonAction, эти два могут быть ответственны за ответ на этот запрос.Это неоднозначно, код не знает, какой из них вызывать.

Добавление HttpGet к первому методу исправляет это, потому что первый метод больше не рассматривается в качестве кандидата при отправке запроса Post.

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