Jaka jest różnica między [AcceptVerbs (HttpVerb.Post)] a [HttpPost]?

81

Mogę udekorować akcję za pomocą [AcceptVerbs (HttpVerb.Post)] / [AcceptVerbs (HttpVerbs.Get)]

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

lub z atrybutami [HttpPost] / [HttpGet]

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

Czy są różne?

Lorenzo
źródło
1
HttpPost to MVC 2.0+ i jak powiedział Matthew, to tylko krótka ręka
dbones
w jaki sposób wyrażenia takie jak [HttpPost] są wywoływane w asp net mvc? dekoratorzy?
andilabs
@andi Nazywają się „Atrybuty” msdn.microsoft.com/en-us/library/z0w1kczw.aspx
Gabriel Espinoza
Odkryłem, że [AcceptVerbs("GET")]może zatrzymać generowanie wpisu dla tej akcji w dokumentach pomocy.
CompanyDroneFromSector7G

Odpowiedzi:

55

Nic. Jedno jest skrótem od drugiego.

Matthew Manela
źródło
1
Nie można po prostu akceptować pobierania i wysyłania w jednym punkcie końcowym. Jaki jest cel tego punktu końcowego?
sensei
nie powinna to być sugerowana odpowiedź, ponieważ jest błędna.
John Lord
201

[HttpPost]jest skrótem od [AcceptVerbs(HttpVerbs.Post)]. Jedyna różnica polega na tym, że nie można używać [HttpGet, HttpPost](i podobnych) razem w tej samej akcji. Jeśli chcesz, aby akcja odpowiadała zarówno na GET, jak i POST, musisz użyć [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)].

Rudresha Parameshappa
źródło
20
jest to bardziej poprawna i bardziej pouczająca odpowiedź niż przyjęta.
24x7Programmer,
1
Wolę używać [HttpPost] i [HttpGet]. Kiedy potrzebuję ich obu do jednej akcji: po prostu nie używaj żadnego (ponieważ nie potrzebujesz PUT, DELETE ani innych)
Sergey G.
1
Wolę spójność, co niestety oznacza, że ​​tylko „stare” AcceptVerbs to sposób, który zawsze będzie działał, szkoda. Microsoft powinien zmienić atrybut, aby zezwolić na wielokrotne użycie i odpowiednio przetworzyć to w swoim potoku, aby ta „nowa” metoda nie powodowała zamieszania i problemów, np. Stackoverflow.com/questions/16658020/ ...
Tony Wall
2
@CodeChief Szybki eksperyment myślowy wyjaśni, dlaczego tak jest ... AcceptVerbsAtrybut przyjmuje jeden parametr Flags. Ustawiasz wiele flag, oringując je. [HttpPost]jest tylko skrótem dla [AcceptVerbs(HttpVerbs.Post)] Nie ma mechanizmu dostępnego dla flag OR, jeśli używasz skrótu; dlatego AcceptVerbs nadal istnieje (poza przyczynami wstecznej kompatybilności).
Robert Harvey
@RobertHarvey - Jasne jest, czym one są, dyskusja dotyczy tego, dlaczego nie pozwolić na współpracę dwóch różnych atrybutów HttpGet i HttpPost. Muszę myśleć o szkoleniu i budowaniu zespołów programistycznych. Co każesz innym programistom zrobić… „Och, użyj tego atrybutu… ale w tym przypadku użyj drugiego…”. Dlatego dla spójności jedyną metodą, którą można po prostu powiedzieć ludziom, jest AcceptVerbs. To ograniczenie HttpGet / HttpPost nie jest intuicyjne i prawdopodobnie jest błędem. Ogólnie nie jest to duży problem, po prostu „gotcha”.
Tony Wall