¿Cuál es la diferencia entre [AcceptVerbs (HttpVerbs.Post)] y [HttpPost]?

81

Puedo decorar una acción con [AcceptVerbs (HttpVerbs.Post)] / [AcceptVerbs (HttpVerbs.Get)]

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

o con los atributos [HttpPost] / [HttpGet]

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

¿Son diferentes?

Lorenzo
fuente
1
HttpPost es MVC 2.0+, y como dijo Matthew, es una mano corta
dbones
¿Cómo se llaman expresiones como [HttpPost] en asp net mvc? decoradores?
andilabs
@andi Se llaman "Atributos" msdn.microsoft.com/en-us/library/z0w1kczw.aspx
Gabriel Espinoza
Descubrí que [AcceptVerbs("GET")]puede evitar que se genere una entrada para esa acción en los documentos de ayuda.
CompanyDroneFromSector7G

Respuestas:

55

Nada. Uno es la abreviatura del otro.

Mateo Manela
fuente
1
No se acepta simplemente obtener y publicar en un punto final. ¿Cuál es el punto de ese punto final?
sensei
esta no debería ser la respuesta sugerida ya que es incorrecta.
John Lord
201

[HttpPost]es la abreviatura de [AcceptVerbs(HttpVerbs.Post)]. La única diferencia es que no puede usar [HttpGet, HttpPost](y similares) juntos en la misma acción. Si desea que una acción responda tanto a GET como a POST, debe usar [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)].

Rudresha Parameshappa
fuente
20
esta es una respuesta más correcta e informativa que una aceptada.
24x7Programmer
1
Prefiero usar [HttpPost] y [HttpGet]. Cuando los necesito a ambos para una acción: simplemente no use ninguno (ya que no necesita PUT, DELETE u otros)
Sergey G.
1
Prefiero la coherencia, lo que significa que, lamentablemente, sólo "los viejos" AcceptVerbs es la forma que siempre funcionará, vergüenza. Microsoft debería cambiar el atributo para permitir el uso múltiple y el proceso correspondiente en su canalización, para evitar que este método "nuevo" cause confusión y problemas, por ejemplo, stackoverflow.com/questions/16658020/…
Tony Wall
2
@CodeChief Un experimento de pensamiento rápido aclararía por qué es así ... El AcceptVerbsatributo toma un solo parámetro Flags. Establece varias banderas orinándolas. [HttpPost]es simplemente una abreviatura de [AcceptVerbs(HttpVerbs.Post)] No hay ningún mecanismo disponible para los indicadores OR juntos si usa la abreviatura; es por eso que AcceptVerbs todavía existe (más allá de las razones de compatibilidad con versiones anteriores).
Robert Harvey
@RobertHarvey: está claro cuáles son, la discusión es por qué no permitir que los dos atributos HttpGet y HttpPost diferentes funcionen juntos. En lo que tengo que pensar es en formar y formar equipos de desarrollo. ¿Qué le dice a otros desarrolladores que hagan ... "Oh, use este atributo ... pero en este caso use el otro ...." Por lo tanto, por coherencia, el único que podría decirle a la gente que use, simplemente, es AcceptVerbs. Esta limitación de HttpGet / HttpPost no es intuitiva, posiblemente un error. No es un gran problema en general, solo un "te atrapé".
Tony Wall