ASP.NET MVC当前对X的请求不明确

时间:2019-02-18 13:52:32

标签: c# asp.net-mvc asp.net-mvc-5 autofac

我尝试登录时收到以下异常:

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(),一切都会很好。

有人对如何使它起作用或为什么不起作用有想法吗?

1 个答案:

答案 0 :(得分:0)

当您请求登录页面时,这是一个Get请求,当前只有一种可能的方法,因为另一种方法是用HttpPost装饰的。因此,请求登录页面是明确的。

提交登录表单后,该请求即成为发帖请求。由于存在标记为HttpPost的方法和未标记为NonAction的公共方法,因此这两个方法可能负责回答该请求。模棱两可,代码不知道该调用哪个。

在第一个方法中添加HttpGet可以解决此问题,因为在发送Post请求时,第一个方法不再被视为候选方法。