2008-11-10 11 views
16

Mam projekt ASP.NET MVC i mam jedną akcję, która akceptuje żądania GET, POST i DELETE. Każdy typ żądania jest filtrowany za pomocą atrybutów na moich metodach kontrolerów Action.Czy można wyzwolić żądanie HTTP DELETE z formularza HTML?

[ActionName(Constants.AdministrationGraphDashboardAction), 
AcceptVerbs(HttpVerbs.Post)] 
public ActionResult GraphAdd([ModelBinder(typeof (GraphDescriptorBinder))] GraphDescriptor details); 

[ActionName(Constants.AdministrationGraphDashboardAction), 
AcceptVerbs(HttpVerbs.Delete)] 
public ActionResult GraphDelete([ModelBinder(typeof (RdfUriBinder))] RdfUri graphUri) 

Moja metoda GraphAdd działa bardzo dobrze. Próbuję dowiedzieć się, w jaki sposób mogę utworzyć łącze HTML (<form /> lub <a />), które spowoduje, że przeglądarka wykona żądanie usunięcia HTTP i uruchomi moją metodę GraphDelete.

Jeśli istnieje sposób, aby to zrobić, to może ktoś wstawi przykładowy kod HTML i jeśli jest dostępny, powinienem użyć metody MVC HtmlHelper?

Odpowiedz

13

Nie wierzę, że to możliwe. atrybut metody elementów formularza w HTML4 & XHTML 1.0 zaakceptuje tylko GET lub POST. ponadto standardowe konfiguracje większości serwerów sieciowych będą blokować żądania DELETE i PUT. zakładając skonfigurowaniu serwera WWW w celu umożliwienia podobne metody PUT/DELETE (jak robi WebDav), można następnie tworzyć własne żądanie HTTP:

DELETE /resource.html HTTP/1.1 
Host: domain.com 

i obsługiwać go w odpowiedni sposób. jednak nie można tego zrobić za pomocą bieżącego formularza HTML. ze względu na interes, istnieje some discussion dla obsługi DELETE w HTML5.

+0

Świetna odpowiedź dzięki Owen! –

+0

Mam nadzieję, że HTML5 zwiększa wsparcie dla czasowników HTTP. – lupefiasco

+0

Dla Asp Mvc istnieje coś takiego jak HttpMethodOverride http://msdn.microsoft.com/en-us/library/ee407388(v=vs.118).aspx. Dzieje się tak, gdy przeglądarka przesyła formularz POST z ukrytym polem, który zastępuje metodę używaną podczas określania, które działanie kontrolera wywoływane jest w .Net Routing Engine. –

7

Korzystanie z XMLHttpRequest, to nie tylko "najlepsza praktyka", to naprawdę jedyny sposób.

Powiązane problemy