2008-11-10 13 views
16

Tengo un proyecto ASP.NET MVC y tengo una sola acción que acepta solicitudes GET, POST y DELETE. Cada tipo de solicitud se filtra mediante atributos en mis controladores Action métodos.¿Es posible activar una solicitud HTTP DELETE desde un formulario 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) 

Tengo mi método GraphAdd trabajando muy bien. Lo que estoy tratando de averiguar es cómo puedo crear un HTML <form /> o <a /> (enlace) que hará que el navegador realice una solicitud HTTP Delete y active mi método GraphDelete.

Si hay una forma de hacerlo, ¿alguien puede publicar un ejemplo de HTML y, si está disponible, el método MVC HtmlHelper que debería utilizar?

Respuesta

13

No creo que esto sea posible. el atributo de método de los elementos de formulario en HTML4 & XHTML 1.0 solo aceptará GET o POST. Además, las configuraciones estándar de la mayoría de los servidores web negarán las solicitudes DELETE y PUT. suponiendo que haya configurado el servidor web para permitir métodos como PUT/DELETE (tal como lo hace WebDAV), a continuación, puede crear su propia petición HTTP:

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

y manejarlo adecuadamente. sin embargo, no hay forma de hacerlo a través de un formulario HTML actual. por el interés, hay some discussion para el apoyo DELETE en HTML5.

+0

¡Gran respuesta gracias Owen! –

+0

Espero que HTML5 aumente el soporte para verbos HTTP. – lupefiasco

+0

Para Asp Mvc, existe algo como HttpMethodOverride http://msdn.microsoft.com/en-us/library/ee407388(v=vs.118).aspx. Esto funciona haciendo que el navegador envíe un formulario POST con un campo oculto que anula el método utilizado al determinar qué acción del controlador invocar dentro del motor de enrutamiento .Net. –

7

Al usar XMLHttpRequest, no solo es la "mejor práctica", sino que es la única manera.

Cuestiones relacionadas