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>