Was ist der Unterschied zwischen [AcceptVerbs (HttpVerbs.Post)] und [HttpPost]?


81

Ich kann eine Aktion entweder mit [AcceptVerbs (HttpVerbs.Post)] / [AcceptVerbs (HttpVerbs.Get)] dekorieren.

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

oder mit den Attributen [HttpPost] / [HttpGet]

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

Sind sie unterschiedlich?


1
HttpPost ist MVC 2.0+, und wie Matthew sagte, ist es nur eine kurze Hand
dbones

Wie werden Ausdrücke wie [HttpPost] in asp net mvc aufgerufen? Dekorateure?
Andilabs


Ich habe festgestellt, dass [AcceptVerbs("GET")]ein Eintrag für diese Aktion in den Hilfedokumenten nicht mehr generiert werden kann.
CompanyDroneFromSector7G

Antworten:


55

Nichts. Eins ist nur eine Abkürzung für das andere.


1
Man akzeptiert nicht einfach das Abrufen und Veröffentlichen an einem Endpunkt. Was ist der Sinn dieses Endpunkts?
Sensei

Dies sollte nicht die vorgeschlagene Antwort sein, da sie falsch ist.
John Lord

199

[HttpPost]ist eine Abkürzung für [AcceptVerbs(HttpVerbs.Post)]. Der einzige Unterschied besteht darin, dass Sie nicht [HttpGet, HttpPost](und ähnliche) zusammen für dieselbe Aktion verwenden können. Wenn Sie möchten, dass eine Aktion sowohl auf GETs als auch auf POSTs reagiert, müssen Sie diese verwenden [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)].


20
Dies ist eine korrektere und informativere Antwort als eine akzeptierte.
24x7Programmer

Ich bevorzuge [HttpPost] und [HttpGet]. Wenn ich beide für eine Aktion brauche: benutze einfach keine (da du PUT, DELETE oder andere nicht brauchst)
Sergey G.

1
Ich bevorzuge Konsistenz, was leider bedeutet, dass nur "die alten" AcceptVerbs die Art und Weise sind, die immer funktionieren wird, schade. Microsoft sollte das Attribut ändern, um eine mehrfache Verwendung zu ermöglichen und diese entsprechend in ihrer Pipeline zu verarbeiten, um zu verhindern, dass diese "neue" Methode Verwirrung und Probleme verursacht, z. B. stackoverflow.com/questions/16658020/…
Tony Wall

2
@CodeChief Ein kurzes Gedankenexperiment würde verdeutlichen, warum es so ist ... Das AcceptVerbsAttribut verwendet einen einzelnen Flags-Parameter. Sie setzen mehrere Flags, indem Sie sie ordnen. [HttpPost]ist nur eine Abkürzung für [AcceptVerbs(HttpVerbs.Post)] Es gibt keinen Mechanismus für OR-Flags zusammen, wenn Sie die Kurzschrift verwenden. Aus diesem Grund gibt es AcceptVerbs immer noch (abgesehen von Gründen der Abwärtskompatibilität).
Robert Harvey

@RobertHarvey - Es ist klar, was sie sind. Die Diskussion ist, warum nicht die beiden unterschiedlichen Attribute HttpGet und HttpPost zusammenarbeiten dürfen. Ich muss daran denken, Entwicklungsteams auszubilden und aufzubauen. Was sagen Sie anderen Entwicklern zu tun ... "Oh, verwenden Sie dieses Attribut ... aber in diesem Fall verwenden Sie das andere ...". Aus Gründen der Konsistenz ist AcceptVerbs das einzige, von dem Sie den Leuten sagen können, dass sie es einfach verwenden sollen. Diese Einschränkung von HttpGet / HttpPost ist nicht intuitiv, wahrscheinlich ein Fehler. Insgesamt kein großes Problem, nur ein "Gotcha".
Tony Wall
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.