Recientemente actualicé de Visual Studio 2010 a Visual Studio 2012 RC. El instalador también instala IIS 8 Express que Visual Studio ahora usa como el servidor web predeterminado.
IIS 8 está bloqueando mis solicitudes de API WEB que usan verbos PUT AND DELETE. IIS devuelve un error 405, The requested resource does not support http method 'PUT'
.
Sé que la gente tuvo problemas con esto en el pasado y hay varios mensajes al respecto en Stack Overflow. Con IIS 7 Express, la solución fue desinstalar WebDav. Lamentablemente, no veo ninguna forma de hacerlo con IIS 8.
Intenté editar las secciones de WebDav desde applicationhost.config, pero eso no me ayudó. Por ejemplo, <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
eliminé del archivo de configuración.
He pasado demasiado tiempo en esto. Debe haber una manera simple de habilitar PUT y DELETE?
fuente
ExtensionlessUrl-Integrated-4.0
.Respuestas:
Bueno. Finalmente llegué al fondo de esto. Debe saltar algunos aros para que los verbos PUT y DELETE funcionen correctamente con IIS8. De hecho, si instala la versión candidata de VS 2012 y crea un nuevo proyecto de API WEB, encontrará que los métodos PUT y DELETE de muestra devuelven errores 404 de fábrica.
Para usar los verbos PUT y DELETE con la API web, necesita editar% userprofile% \ documents \ iisexpress \ config \ applicationhost.config y agregar los verbos al controlador ExtensionlessUrl de la siguiente manera:
Cambia esta línea:
a:
Además de lo anterior, debe asegurarse de que WebDAV no interfiera con sus solicitudes. Esto se puede hacer comentando las siguientes líneas de applicationhost.config.
También tenga en cuenta que la convención API web predeterminada es que el nombre de su método debe ser el mismo que el verbo HTTP invocado. Por ejemplo, si está enviando una solicitud de eliminación HTTP, su método, por defecto, debería llamarse Eliminar.
fuente
WebDAVModule
de la sección de módulos, según la respuesta de Santosh Sah .Cambie su archivo Web.Config como se muestra a continuación. Actuará como encanto.
En el nodo,
<system.webServer>
agregue debajo de la parte del códigoDespués de agregar, su Web.Config se verá a continuación
fuente
WebDAVModule
es relevante."ExtensionlessUrlHandler-Integrated-4.0"
(como en la respuesta anterior) mientras que IIS 8.5 tiene este nombre"ExtensionlessUrl-Integrated-4.0"
(también mencionado por Mark S. El nombre del controlador se muestra en la página de error de IIS, una vez que recibe el error, por lo que debería ser trivial saber cuál establecer. Utilizo ambos nombres para admitir diferentes entornos de alojamiento.Eliminar el WebDAV funciona perfectamente para mi caso:
siempre es mejor resolver el problema a través de web.config en lugar de solucionarlo a través de iis o machine.config para el concesionario, no sucedería si la aplicación estuviera alojada en otra máquina
fuente
Actualiza tu web.config
http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx
Elimina la necesidad de modificar las configuraciones de su host.
fuente
En Asp.Net Web API - webconfig. Esto funciona en todos los navegadores.
Agregue el siguiente código dentro de la etiqueta System.web
Reemplace su etiqueta system.webserver con este código a continuación
fuente
system.webserver
sección debería ser suficiente, solo asegúrese de tener el nombre correcto para el controlador de URL sin extensión.Esto funcionó para mí en iis8 junto con algunas de las otras respuestas. Mi error fue un 404.6 específicamente
fuente
Solo una actualización rápida para cualquier otra persona que pueda tener este problema. A partir de hoy, cambiar el% userprofile% \ documents \ iisexpress \ config \ applicationhost.config ya no funciona (esto funcionaba bien hasta ahora, no estoy seguro si esto se debe a una actualización de Windows). Después de horas de frustración, cambié web.config para agregar estos controladores a system.webserver para que funcione:
fuente
Habilitar CORS (agradable y ordenado)
1.Agregue el paquete nuget CORS
2.en el archivo WebApiConfig.cs para registrar el método, agregue el siguiente código:
ej .:
usando System.Web.Http;
3.Agregue el siguiente código en el espacio de nombres del controlador que incluye get, post, delete, put o cualquier método http
ex:
referencia: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
fuente
Después de que nada funcionó, pude resolver esto siguiendo los pasos a continuación:
• No seleccioné la configuración de IIS 'WEB DAV PUBLISHING' al instalar IIS. • INETMGR - Sitio web predeterminado - Filtrado de solicitudes - Verbos HTTP - PONER como verdadero
fuente
Después de buscar sin parar y probar las respuestas ya suministradas (agregando PUT, BORRAR verbos y eliminar WEBdav) simplemente no funcionó.
Fui a la configuración de registro de IIS:> Ver archivos de registro. En mi caso, W3SVC4 era la carpeta con la última fecha, abrió la carpeta, buscó el último archivo de registro y vi esta entrada: GET / Rejected-By-UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD
El método de actualización se enumeró con el verbo GET, raro ¿verdad? Así que busqué en Google Rejected-By-UrlScan y encontré este enlace: UrlScan Broke My Blog .
Fui a aquí:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini
Básicamente, el UrlScan bloqueó los verbos PUT y DELETE. Abrí este archivo INI, agregué PUT y DELETE a AllowVerbs y los eliminé de las listas de DenyVerbs. ¡Guarde el archivo INI y funcionó! Entonces, para mí, estos pasos fueron necesarios junto a las sugerencias de ExtensionlessUrlHandler.
Windows Webserver 2008 R2 (64 bits), IIS 7.5. Estoy usando esto en combinación con DotNetNuke (DNN) WebAPI. ASP.Net 4.0 Mi método de actualización:
fuente
Para PHP, fue simplemente:
Me imagino que esto también funcionará con otros controladores.
fuente
Además de todas las soluciones anteriores, verifique si tiene el " id " o si algún parámetro personalizado definido en el método DELETE coincide con la configuración de la ruta.
Si aciertas con repetidos errores 405, mejor restablece la firma del método a la predeterminada como se indica arriba e inténtalo.
La configuración de ruta por defecto buscará la identificación en la URL. Entonces, la identificación del nombre del parámetro es importante aquí a menos que cambie la configuración de ruta en App_Start carpeta .
Puede cambiar el tipo de datos de la identificación embargo, .
Por ejemplo, el siguiente método debería funcionar bien:
Nota: También asegúrese de pasar los datos por la URL, no por el método de datos que llevará la carga útil como contenido del cuerpo.
Ejemplo:
Espero eso ayude.
fuente
He enfrentado el mismo problema con usted, luego lo resolví. Aquí hay soluciones, desearía que tal vez pueda ayudar
Primero
En la
modules
configuración de IIS , conecte el WebDAVModule , si su servidor web lo tiene, luego retíreloSegundo
En la
handler mappings
configuración de IIS , puede ver la lista de controladores habilitantes, elegirlosthe PHP item
, editarlos, en la página de edición, hacer clic en el botón Solicitar restricciones, luego seleccionarthe verbs tab
en el modal, en especificar los verbos para manejar la etiqueta, verificar elall verbs radio
, luego haga clic en Aceptar, también puede ver una advertencia, nos muestra que utiliza comillas dobles para la ejecución de PHP-CGI, luego hágalosi lo ha hecho, reinicie el servidor IIS, estará bien
fuente
No estoy seguro si ha editado el archivo de configuración correcto. Intenta seguir los pasos
abrir% userprofile% \ ducuments \ iisexpress \ config \ applicationhost.config
Por defecto, debajo de las entradas dadas se comentan en el archivo applicationhost.config. descomenta estas entradas.
fuente
Así es como permite verbos HTTP adicionales usando la GUI del Administrador de IIS.
En el Administrador de IIS, seleccione el sitio para el que desea permitir PUT o DELETE.
Haga clic en la opción "Solicitar filtrado". Haz clic en la pestaña "Verbos HTTP".
Haz clic en el enlace "Permitir verbo ..." en la barra lateral.
En el cuadro que aparece, escriba "BORRAR", haga clic en Aceptar.
Haga clic en el enlace "Permitir verbo ..." en la barra lateral nuevamente.
En el cuadro que aparece, escriba "PUT", haga clic en Aceptar.
fuente
Estoy usando un archivo ashx en una aplicación MVC y ninguna de las respuestas anteriores funcionó para mí. IIS 10.
Esto es lo que funcionó. En lugar de cambiar " ExtensionlessUrl-Integrated-4.0 " en IIS o web.config, cambié " SimpleHandlerFactory-Integrated-4.0 " por archivos " * .ashx ":
fuente
La otra razón puede ser la siguiente:
cambié mi método de URL para Web Api de acuerdo con esta respuesta :
Pero este método crea enlaces como:
Esto funciona correctamente con las solicitudes GET y POST pero no con PUT o DELETE.
Así que lo reemplacé con:
Y solucionó el problema.
fuente
En IIS 8.5 / Windows 2012R2, nada de lo mencionado aquí funcionó para mí. No sé qué significa eliminar WebDAV, pero eso no resolvió el problema.
Lo que me ayudó fueron los siguientes pasos;
Ahora todo está funcionando.
fuente
Puede convertir su método Delete como POST como;
fuente