Wie die httppost httpput etc Attribute in ASP.NET MVC 2 arbeiten?
In ASP.NET MVC 2, ein paar neue action filter-Attribute eingeführt wurden, als "Kürzel" für Attribute in ASP.NET MVC 1; zum Beispiel die Anwendung des HttpPostAttribute
macht das gleiche wie die Anwendung [AcceptVerbs(HttpVerbs.Post)]
zu einer action-Methode.
Darüber hinaus mit der mehr verbose syntax ist es möglich, verschiedene Methoden zu kombinieren, um damit zum Beispiel beide Post
und Delete
.
Nun Frage ich mich: wie sehen die neuen Parametern zu arbeiten? Habe ich, wenn ich beide [HttpPost]
und [HttpDelete]
wird ASP.NET MVC 2 ermöglichen beide oder erfordern beide (so dass nichts)?
InformationsquelleAutor Tomas Aschan | 2010-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf den code für ActionMethodSelector, es scheint, dass alle action-Methode Attribute muss true zurückgeben, für IsValidForRequest vor, die Aktion wird Hinzugefügt, um die Menge der möglichen matching-Methoden. Da es nicht möglich für HttpPost und HttpDelete zurück IsValidForRequest für die gleiche Anfrage, ich würde erwarten, dass mit beiden verhindern, dass die Aktion von immer passend zu jedem Antrag.
Hier ist ein beredtes Kommentar aus dem code:
(Hervorhebung von mir)
Beachten Sie, dass Sie immer noch mit AcceptVerbs und explizit ODER die Verben, wenn Sie übereinstimmen müssen.
BEARBEITEN -- hier ist ein HttpPostOrDelete Attribut für Sie.
AcceptVerbs
, aber ich denke, die neuen Attribute, die sehen viel schöner im code, und hatte gehofft das MVC-team dachte über diese bei der Umsetzung...glücklicherweise, Sie können Ihre eigenen, wie gebraucht. Siehe mein update.
InformationsquelleAutor tvanfosson
Alle Filter in MVC sind - ohne Ausnahme - unabhängig voneinander. Kein filter special-cased überall in der MVC-framework. Dies war eine absichtliche design-Entscheidung so, dass MVC framework-Komponenten wie der invoker kann nicht "schummeln" und die Behandlung der Filter befindet sich in der MVC binären anders als der Filter, die Sie als Anwendungsentwickler geschrieben hätte.
So, wenn der invoker sieht [HttpGet] und [HttpPost] auf die gleiche Methode, es gibt keine speziellen-Gehäuse-code zu nehmen, die union der beiden. Sie sind unabhängig. Und weil Sie nie true zurück, für die gleiche Anfrage, [HttpGet, HttpPost] wirksam ausgeschlossen einer bestimmten Methode aus einer action-Methode.
InformationsquelleAutor Levi
Können Sie AcceptVerbs für die Verkettung, z.B.:
oder
InformationsquelleAutor Ankur Bulsara
Wenn Sie
[HttpPost]
und[HttpDelete]
gemeinsam wird es erfordern (was nicht möglich ist), denke ich. Wenn Sie die Kette[HttpGet]
es wird nicht funktionieren, etc...Können Sie leicht testen, Sie meinen nur, einen vorhandenen
[HttpPost]
action-Methode und das hinzufügen[HttpDelete]
. Die post wird nicht mehr funktionieren.Habe ich nicht gefunden keine Beispiele, wo ich brauchen würde, um die Kette Sie wie Ihr darauf hindeutet aber.
HttpPost und HttpDelete ist ziemlich commonI erwarten würde, wenn Sie erwarten, dass eine delete-Aktion, um den Betrieb sowohl mit AJAX (Löschen) und nicht-AJAX (Post), wenn javascript deaktiviert ist.
Ich versuchte wirklich ein test, und konnte nicht finden, dass irgendwelche Kombinationen wo ich bekommen konnte Ketten gefesselt Attribut wie dein Beispiel funktioniert. Ich nahm Arbeitsmethoden und einfach Attribute Hinzugefügt, um Sie und sicher genug, er brach Sie alle.
InformationsquelleAutor Kelsey