如果我已经用[AcceptVerbs(..)]属性装饰了我的动作方法,我必须在路由定义(注册路由时)注册HttpVerb约束?
例如。我有这个。
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(FormCollection formCollection) { .. }
我需要添加到引用此操作的路由作为约束吗?
解决方法
两者之间的区别如下:我们假设有关的Create方法是在HomeController上。
使用AcceptVerbs属性不影响路由。它实际上是动作调用者使用的东西。它允许您做的是在控制器上具有两个与每个响应不同的HTTP方法相同的名称的操作方法。
public ActionResult Create(int id) { .. } [AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(FormCollection formCollection) { .. }
因此,当/ home / create的请求进入时,路由将匹配并将请求切换到控制器的调用者。然后,调用者通过查看AcceptVerbs属性来调用正确的方法。
在路由中使用HttpMethodConstraint将使路由本身与请求不匹配。所以当POST请求进入/ home / create时,既不会调用action方法,因为该路由与请求不匹配。有可能另外一条路线会匹配那个请求。
这里重叠的部分原因是路由是ASP.NET 3.5 SP1的一个功能,并不是MVC特有的。 MVC使用路由,但动态数据也使用路由,我们计划将路由与ASP.NET Web窗体集成。