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

标签 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)
    {
       // ...
    }
}

我的其他 Action 是这样构建的

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));

如果我在 Login() 之前放置一个 [HttpGet] 一切正常。

有人知道如何让它工作或为什么它不起作用吗?

最佳答案

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

当您提交登录表单时,这将成为一个 Post 请求。由于有一个标记为 HttpPost 的方法和一个未标记为 NonAction 的公共(public)方法,因此这两个方法可能负责响应该请求。它是有歧义的,代码不知道调用哪一个。

将 HttpGet 添加到第一个方法可以修复它,因为当您发送 Post 请求时,第一个方法不再被视为候选方法。

关于c# - ASP.NET MVC 当前对 X 的请求不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54748820/

相关文章:

c# - .Net 中的 LDAP 目录条目 - 不适用于 OU=Users

c# - 将基于 JS 的可视化库与 C#/Linq 集合一起使用

asp.net-mvc - Windows Azure + Asp.Net MVC + 电子商务

json - ASP.net MVC 返回 JSONP

asp.net-mvc - MVC 5 中的 session 固定攻击仍然是一个问题吗

C#动态替换对象类中的对象~

c# - 更改从 wcf 服务方法返回的 json 对象包装器名称

c# - 使用 JavaScript 为 MVC 应用构建相对 URL

asp.net - 使用路由或其他方法强制使用 http 或 https?

asp.net-mvc - 使用单个链接对字段进行升序和降序排序