【问题标题】:What is the difference between [AcceptVerbs(HttpVerbs.Post)] and [HttpPost]?[AcceptVerbs(HttpVerbs.Post)] 和 [HttpPost] 有什么区别?
【发布时间】:2011-04-20 02:56:10
【问题描述】:

我可以使用 [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...
}

它们有什么不同吗?

【问题讨论】:

  • HttpPost 是 MVC 2.0+,正如 Matthew 所说,它只是简写
  • asp net mvc中如何调用[HttpPost]之类的表达式?装饰师?
  • @andi 他们被称为“属性”msdn.microsoft.com/en-us/library/z0w1kczw.aspx
  • 我发现[AcceptVerbs("GET")] 可以停止帮助文档中生成的该操作的条目。

标签: asp.net-mvc asp.net-mvc-2 http-post http-get


【解决方案1】:

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

【讨论】:

  • 这比接受的答案更正确,信息更丰富。
  • 我更喜欢使用 [HttpPost] 和 [HttpGet]。 当我需要它们来执行一项操作时:不要使用任何操作(因为您不需要 PUT、DELETE 或其他操作)
  • 我更喜欢一致性,这意味着不幸的是,只有“旧的”AcceptVerbs 才是永远有效的方式,耻辱。 Microsoft 应该更改该属性以允许在其管道中相应地进行多次使用和处理,以防止这种“新”方法造成混乱和麻烦,例如stackoverflow.com/questions/16658020/…
  • @CodeChief 一个快速的思考实验将阐明为什么它是这样的......AcceptVerbs 属性采用单个标志参数。您可以通过 Or-ing 设置多个标志。 [HttpPost] 只是[AcceptVerbs(HttpVerbs.Post)] 的简写,如果使用简写,则没有可用于 OR 标志的机制;这就是 AcceptVerbs 仍然存在的原因(除了向后兼容的原因)。
  • @RobertHarvey - 很清楚它们是什么,讨论的是为什么不允许两个 不同 HttpGet 和 HttpPost 属性一起工作。我必须考虑的是培训和建立开发团队。你告诉其他开发人员做什么......“哦,使用这个属性......但在这种情况下使用另一个......”。因此,为了保持一致性,您可以告诉人们使用的唯一一个就是 AcceptVerbs。 HttpGet/HttpPost 的这种限制并不直观,可以说是一个 bug。总的来说不是什么大问题,只是一个“陷阱”。
【解决方案2】:

什么都没有。一个只是另一个的简写。

【讨论】:

  • 一个不只是在一个端点上接受获取和发布。那个端点有什么意义?
  • 这不应该是建议的答案,因为它是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 2011-12-12
相关资源
最近更新 更多