c# asp.net-mvc-3 iis-7.5 http-put http-delete

c# - ¿Cómo habilito HTTP PUT y DELETE para ASP.NET MVC en IIS?



asp.net-mvc-3 iis-7.5 (4)

Utilizo HTTP PUT y DELETE en mi aplicación ASP.NET MVC3. Cuando lo ejecuto en local, todo funciona correctamente; Pero cuando publico la aplicación en el servidor, estos métodos no funcionan.

¿Hay alguna configuración especial para permitir que un servidor web admita solicitudes PUT y DELETE ? Estoy usando alojamiento compartido con IIS 7.5.

ACTUALIZAR:

DELETE solicitudes PUT y DELETE en el IIS manager . PUT comando PUT funciona bien. Pero DELETE todavía no funciona. Creo solicitudes de jQuery :

Estoy en esta página:

http://domain.com/dashboard/edit-site/103323/links/

y mi llamada ajax es:

$.ajax({ // url: same as page-url, cache: false, type: ''DELETE'', data: { linkid: $(link).data("linkid") }, beforeSend: function () { // doing something in UI }, complete: function () { // doing something in UI }, success: function (data) { // doing something in UI }, error: function () { // doing something in UI } });

Esto creará una solicitud como esta:

Accept: */* Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Origin: http://domain.com Referer: http://domain.com/dashboard/edit-site/103323/links/ User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1 X-Requested-With: XMLHttpRequest

Con este Form Data :

linkid:104044


Finalmente encuentro la respuesta fluctuante. Cambié la llamada jQuery a la siguiente y ahora está funcionando bien.

$.ajax({ url: this.href + "?linkid=" + $(link).data("linkid"), cache: false, type: ''DELETE'', // data: { linkid: $(link).data("linkid") }, beforeSend: function () { // doing something in UI }, complete: function () { // doing something in UI }, success: function (data) { // doing something in UI }, error: function () { // doing something in UI } });

¿Tiene alguna explicación de por qué una llamada DELETE , no puede tener Form Data ? Mientras que en el local, ¿tenía y funcionaba bien?


Si obtiene un error de seguimiento en su entorno de producción en asp.net web api en PUT o DELETE aunque estos métodos funcionan perfectamente localmente.

405 - El verbo http utilizado para acceder a esta página no está permitido.

Simplemente agregue las siguientes configuraciones en la web.config de su servidor

<system.webServer> <handlers> <remove name="WebDAV" /> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> <remove name="OPTIONSVerbHandler" /> <remove name="TRACEVerbHandler" /> <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> </handlers> <modules> <remove name="WebDAVModule" /> </modules> </system.webServer>

Causa: el módulo webDAV bloquea los métodos PUT / DELETE de forma predeterminada. Por lo tanto, primero elimine este módulo y su controlador. Primero eliminamos cualquier configuración existente de ExtensionlessUrlHandler-Integrated-4.0 y lo agregamos con la path y los verbs deseados.


Solo necesita agregar las siguientes líneas de código en su web.config

<system.webServer> <security> <requestFiltering> <verbs allowUnlisted="false"> <add verb="GET" allowed="true" /> <add verb="POST" allowed="true" /> <add verb="DELETE" allowed="true" /> <add verb="PUT" allowed="true" /> </verbs> </requestFiltering> </security>

Y

<modules> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> </handlers>


Vaya a Asignaciones de manejador en su Administrador de IIS . Encuentra ExtensionlessUrlHandler-Integrated-4.0 , ExtensionlessUrlHandler-Integrated-4.0 doble clic en él. Haga clic en el botón Restricciones de solicitud ... y en la pestaña Verbos, agregue DELETE y PUT .

EDITAR: posible problema del editor WebDav

Mencionaste en una publicación eliminada que estabas ejecutando en un servidor 2008 ¿verdad? Intente eliminar la función webDav o desactívela de la config de su sitio: en la sección system.webServer -> modules , elimine el módulo WebDAVModule :

<system.webServer> <modules> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> </handlers> </system.webServer>