2010-10-02 8 views
64

posso decorare un'azione sia con i [AcceptVerbs (HttpVerbs.Post)]/[AcceptVerbs (HttpVerbs.Get)]Qual è la differenza tra [AcceptVerbs (HttpVerbs.Post)] e [HttpPost]?

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

o con la [HttpPost]/[HttpGet] attributi

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

Sono diversi?

+1

HttpPost è MVC 2.0+ e, come ha detto Matthew, la sua mano appena corta – dbones

+0

come sono chiamate espressioni come [HttpPost] chiamate in asp net mvc? decoratori? – andi

+0

@andi Si chiamano "Attributi" http://msdn.microsoft.com/en-us/library/z0w1kczw.aspx –

risposta

49

Niente. Uno è solo una scorciatoia per l'altro.

+4

Sei sicuro? Se è così, per favore guarda la risposta qui sotto! .. –

+0

No, sono l'INVERSE l'uno dell'altro –

157

[HttpPost] è una versione abbreviata di [AcceptVerbs(HttpVerbs.Post)]. L'unica differenza è che non è possibile utilizzare [HttpGet, HttpPost] (e simili) insieme sulla stessa azione. Se si desidera un'azione per rispondere a GET e POST, è necessario utilizzare [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)].

+14

questa è la risposta più corretta e informativa di quella accettata. – 24x7Programmer

+0

Preferisco usare [HttpPost] e [HttpGet]. ** Quando ho bisogno di entrambi per una sola azione: semplicemente non ne uso ** (poiché non hai bisogno di PUT, DELETE o altri) – Sergey

+1

Preferisco la consistenza, il che significa che purtroppo solo "il vecchio" AcceptVerbs è il modo in cui funzionerà sempre, vergogna Microsoft dovrebbe modificare l'attributo per consentire l'utilizzo multiplo ed elaborarlo di conseguenza nella propria pipeline, per evitare che questo "nuovo" metodo provochi confusione e problemi, ad es. http://stackoverflow.com/questions/16658020/public-action-method-was-not-found-on-controller –

Problemi correlati