ASP.NET MVC AcceptVerbs和注册路由

Pur*_*ome 21 asp.net-mvc routes acceptverbs http-verbs

如果我已经使用[AcceptVerbs(..)]属性修饰了我的动作方法,我是否必须在路线定义中注册HttpVerb约束(当我注册路线时)?

例如.我有这个.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formCollection)
{ .. }
Run Code Online (Sandbox Code Playgroud)

我是否需要将此添加到引用此操作的路由中,作为约束?

Haa*_*ked 33

两者之间的区别如下:让我们假设有Create问题的方法是在HomeController.

使用该AcceptVerbs属性不会影响路由.它实际上是动作调用者使用的东西.它允许你做的是在控制器上有两个动作方法,每个动作方法具有相同的名称,每个方法都响应不同的HTTP方法.

public ActionResult Create(int id) { .. }

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formCollection) { .. }
Run Code Online (Sandbox Code Playgroud)

因此,当请求/home/create进入时,路由将匹配并将请求移交给控制器的调用者.然后,调用者通过查看AcceptVerbs属性来调用正确的方法.

使用HttpMethodConstraintin routing将使路由本身与请求不匹配.因此,当POST请求进入时/home/create,将不会调用任何操作方法,因为该路由与请求不匹配.但是,另一条路线可能匹配该请求.

这里重叠的部分原因是路由是ASP.NET 3.5 SP1的一个特性,并不是特定于MVC.MVC使用Routing,但Dynamic也使用Routing,我们计划将路由与ASP.NET Web Forms集成.