[AcceptVerbs(HttpVerbs.Post)]和[HttpPost]有什么区别?


81

我可以使用[AcceptVerbs(HttpVerbs.Post)] / [AcceptVerbs(HttpVerbs.Get)]装饰动作

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(string title)
{
    // Do Something...
}

或[HttpPost] / [HttpGet]属性

[HttpPost]
public ActionResult Create(string title)
{
    // Do Something...
}

他们不同吗?


1
HttpPost是MVC 2.0+,和马修说,它只是短期的手
dbones

在ASP.NET MVC中如何调用类似[HttpPost]的表达式?装饰工?
andilabs 2014年


我发现[AcceptVerbs("GET")]可以停止在帮助文档中生成该操作的条目。
CompanyDroneFromSector7G

Answers:



200

[HttpPost]是的简写[AcceptVerbs(HttpVerbs.Post)]。唯一的区别是您不能[HttpGet, HttpPost]在同一操作上一起使用(和类似操作)。如果您希望某个动作同时响应GET和POST,则必须使用[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]


20
这是比公认的答案更正确和更有意义的答案。
24x7Programmer 2013年

1
我更喜欢使用[HttpPost]和[HttpGet]。当我需要它们同时执行一项操作时:请勿使用任何项(因为您不需要执行PUT,DELETE或其他操作)
Sergey G.

1
我更喜欢一致性,这意味着不幸的是,只有“旧的” AcceptVerbs始终有效,可耻。微软应该改变属性,允许多个使用和过程,因此在他们的管道,以防止这种“新”的方法造成的混乱和麻烦,如stackoverflow.com/questions/16658020/...
托尼·沃尔

2
@CodeChief一个快速思考的实验将阐明它的运行方式...该AcceptVerbs属性采用单个Flags参数。您可以通过对它们进行“或”操作来设置多个标志。[HttpPost]仅仅是速记,[AcceptVerbs(HttpVerbs.Post)] 如果使用速记,则没有将OR标志一起使用的机制。这就是为什么AcceptVerbs仍然存在的原因(除了向后兼容的原因)。
罗伯特·哈维

@RobertHarvey-很清楚它们是什么,讨论的原因是为什么不允许两个不同的HttpGet和HttpPost属性一起工作。我要考虑的是培训和建立开发团队。您告诉其他开发人员该怎么做...“哦,使用此属性...,但在这种情况下,请使用另一个....”。因此,为了保持一致性,您唯一可以告诉人们使用的是AcceptVerbs。HttpGet / HttpPost的此限制不直观,可以说是一个错误。总体而言,这不是一个大问题,而只是一个“陷阱”。
托尼·沃尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.