Asp.net mvc 澄清ASP.NET MVC路由和模型绑定

Asp.net mvc 澄清ASP.NET MVC路由和模型绑定,asp.net-mvc,asp.net-mvc-routing,model-binding,Asp.net Mvc,Asp.net Mvc Routing,Model Binding,在ASP.NET MVC中,我最近发现: 这不起作用,并导致HTTP 404 public class TestController : Controller { [HttpGet] [HttpPost] public ActionResult Index(TestModel model) { return View(model); } } 这个很好用 public class TestController : Controller {

在ASP.NET MVC中,我最近发现:

这不起作用,并导致HTTP 404

public class TestController : Controller
{
    [HttpGet]
    [HttpPost]
    public ActionResult Index(TestModel model)
    {
        return View(model);
    }
}
这个很好用

public class TestController : Controller
{
    public ActionResult Index(TestModel model)
    {
        return View(model);
    }
}
这也很好:

public class TestController : Controller
{
    [HttpGet]
    [ActionName("Index")]
    public ActionResult GetIndex(TestModel model)
    {
        return View("Index", model);
    }

    [HttpPost]
    [ActionName("Index")]
    public ActionResult PostIndex(TestModel model)
    {
        return View("Index", model);
    }
}

我想解释一下为什么第一个版本不起作用,而另外两个版本起作用。如果有人能告诉我如何修改第一个版本使其生效,我也将不胜感激。我喜欢第一个版本,因为它更简洁(1个方法而不是2个),并且还过滤掉了不必要的HTTP方法。

HTTP动词属性是互斥的,请求不能同时进行GET和POST。相反,您必须这样做:

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult Index(TestModel model) { ... }

我还不能接受你的回答。我会在大约5分钟后将其标记为已接受:)谢谢!可能的重复似乎是同一个问题,尽管措辞不同。我还问了为什么显而易见的选择不起作用。