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?


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


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.


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)].


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.