尝试登录时收到以下异常:
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)
他们没有问题。
我在MVC 5.2.7应用程序中使用Autofac 4.9和Autofac.Integration.Mvc(4.0)。我从默认MVC模板更改的唯一部分是依赖项解析器
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
如果我在[HttpGet]
之前放置一个Login()
一切正常。
任何人都知道如何使这个工作或为什么它不起作用?
当您请求登录页面时,这是一个Get请求,当前只有一个可能的方法,因为另一个方法是用HttpPost修饰的。因此,请求登录页面是不明确的。
当您提交登录表单时,它将成为Post请求。由于有一个标记为HttpPost的方法和一个未标记为NonAction的公共方法,因此这两个人可能负责回答该请求。它含糊不清,代码不知道要调用哪一个。
将HttpGet添加到第一个方法会修复它,因为当您发送Post请求时,第一个方法不再被视为候选方法。