Tengo una aplicación Web Api. Funciona perfectamente bien cuando lo probé con el servidor de desarrollo de depuración VS 2010. Pero ahora lo implementé en IIS 7.5 y recibo un error HTTP 404 al intentar acceder a la aplicación.
Aquí está mi web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-FlowGearProxy-20123141219;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="true" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
Respuestas:
Yo también estaba luchando con esto. Afortunadamente, Steve Michelotti documentó una solución que me funcionó aquí .
Al final del día, habilité todos los verbos (verbo = "*") para el controlador ExtensionlessUrlHandler-Integrated-4.0 en mi configuración web.
Otros han señalado que tener WebDAV habilitado causa problemas. Afortunadamente, tampoco me encontré con ese problema.
fuente
*
. También tuve que cambiar la ruta para*
que funcionara, ya que*.
todavía causaba el problemaTenía el mismo problema. Este ajuste de configuración resolvió el problema.
Como se explica en http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , se debe evitar la solución anterior. Use esto en su lugar. Lopsided también proporciona la misma solución. Manteniéndolo aquí para que los usuarios eviten implementar la primera solución de trabajo.
fuente
Si IIS está instalado o habilitado después de ASP.NET, deberá registrar manualmente ASP.NET con IIS para que su aplicación .NET funcione.
Para Windows 7 y versiones anteriores:
Para Windows 8 y posterior:
fuente
¿Está ejecutando la aplicación Web API en un directorio virtual o una aplicación?
Por ejemplo: tuve el mismo problema cuando moví mi proyecto a mi IIS local en Sitio web predeterminado> SampleWebAPI. Creo que esto se debe al cambio en el
URL
enrutamiento de la siguiente manera:Original:
localhost:3092/api/values
Movido:
localhost/SampleWebAPI/api/values
Si mueve el proyecto de API web a su propio sitio web que se ejecuta en un puerto diferente, parece que funciona.
Nota adicional: había complicado aún más el problema agregando
api
como el alias de una aplicación dentro de mi sitio web que causó el efectoURL
fuera:localhost:81/api/api/values
- noté esto después de mover el sitio web a su propio sitio webPor lo tanto, debido a que quería mantener una separación entre mi sitio web y el sitio del proyecto web api mvc, cambié las reglas de enrutamiento
global.asax
para la API web "DefaultAPI" deapi/{controller}/{id}
a{controller}/{id}
y ASP.NET MVC unaDefault
de{controller}/{id}
ainfo/{controller}/{id}
.fuente
IIS
queapi
también. Esto provocó toda esta depuración de prueba y error durante más de 2 horas. ¡Muchas gracias por compartir tu experiencia! Se le cambió el nombre y ahora estoy de vuelta en el negocio. : DEsta es la única respuesta que funcionó para mí ...
Tuve un problema similar ... Parecía que no importaba lo que hiciera, nada se redirigía y mi archivo global simplemente estaba siendo ignorado. Consideré seriamente terminar con todo antes de encontrar esta respuesta. Espero que este enlace ayude a alguien más.
Agregar lo siguiente al archivo web.config funcionó para mí:
La etiqueta system.webServer ya estaba allí, por supuesto, pero le agregué la etiqueta de módulos y luego la etiqueta de quitar y agregar a los módulos.
fuente
Algunas cosas para comprobar:
fuente
Tuve un problema similar. Tenía la configuración correcta en mi archivo web.config pero estaba ejecutando el grupo de aplicaciones en el modo clásico en lugar del modo integrado
fuente
Este problema también puede ocurrir debido a lo siguiente
1.En Web.Config
2.Asegúrese de que lo siguiente esté disponible en la carpeta bin del servidor donde se implementa la API web
System.Net.Http
System.Net.Http.Formatting
System.Web.Http.WebHost
System.Web.Http
Estos ensamblados no se copiarán en la carpeta bin de forma predeterminada si la publicación se realiza a través de Visual Studio porque los paquetes de API web se instalan a través de Nuget en la máquina de desarrollo. Aún así, si desea que estos archivos estén disponibles como parte de la publicación de Visual Studio, debe establecer CopyLocal en True para estos ensamblados
Sadish Kumar.V
fuente
En base a esta respuesta, así , sólo tenía que cambiar
path="*."
parapath="*"
el agregadoExtensionlessUrlHandler-Integrated-4.0
deconfiguration>system.WebServer>handlers
miweb.config
Antes de:
Después:
fuente
También me encontré con este problema. Resolví el problema yendo a Grupos de aplicaciones> Nombre del grupo de aplicaciones y cambié .NET Framework de la versión v.2.0.50727 a v4.0.30319.
fuente
Tuve que deshabilitar la opción de publicación de archivos "Precompilar durante la publicación".
fuente
Hay una solución oficial de microsoft: http://support.microsoft.com/kb/980368
NO recomiendo encarecidamente utilizar <módulos runAllManagedModulesForAllRequests = "true">. Esto hace que todas las solicitudes (incluso .jpg, .css, .pdf, etc.) sean procesadas por todos los módulos HTTP registrados. Hay dos momentos negativos: a) carga adicional en los recursos de hardware; b) posibles errores, ya que los módulos http procesarán un nuevo tipo de contenido.
fuente
Comencé a recibir respuestas 404 de Web API después de seguir un tutorial de Windows Azure que me decía que agregara un archivo "WebRole.cs" a mi proyecto.
Después de eliminar "WebRole.cs" de mi proyecto, mis llamadas a la API web comenzaron a funcionar nuevamente.
fuente
Asegúrese de que el grupo de aplicaciones esté en modo integrado
y agregue lo siguiente al archivo web.config:
fuente
En mi caso, el problema era simplemente que estaba intentando acceder al sitio en
myserver.myintranet.com/mysite
Pero el enlace del sitio web para http en IIS no tenía el nombre de host especificado en el enlace. Había funcionado antes y no tengo ni idea de cómo quedó impresionado.
Una vez que puse
myserver.myintranet.com
el nombre de host, el 404 desapareció.En el Administrador de IIS, acceda a Enlaces ... en el panel de acciones, luego edite el enlace http para especificar el nombre de host.
fuente
No olvide implementar global.asax
fuente
Tuve el mismo problema, una respuesta 404 para los controladores de la API web cuando se sirvió desde IIS, pero todo funcionó bien desde VS2010. Ninguna de las soluciones anteriores funcionó para mí. Finalmente, descubrí que el problema era que agregamos soporte WSE 3.0 para la aplicación y faltaba el dll Microsoft.Web.Services3 en el directorio / bin de la aplicación. Extraño, pero después de copiar el dll, el mapeo de rutas comenzó a funcionar.
fuente
Para mí, el problema era que el sitio raíz estaba configurado para usar un grupo de aplicaciones .NET 2.0, y mi aplicación dentro de ese sitio era .NET 4.5.
Creé un nuevo sitio con un grupo de aplicaciones .NET 4 y coloqué mi aplicación en la raíz de eso, y funcionó bien.
fuente
Yo también luché con esto. Mi problema exacto era que tenía un servicio web ASMX que, cuando ingresaba un parámetro en un método web y lo probaba, me daba el 404. El método en particular había funcionado bien en el pasado y no se había cambiado. solo reeditado. Luego llegué aquí y probé todas las respuestas publicadas y nada ayudó.
¿Mi solución definitiva? Sé que esto es drástico, pero acabo de crear una nueva solución de Visual Studio y un proyecto web. Seleccioné MVC, luego hice un "Agregar"> "Nuevo elemento", seleccioné "Visual C #"> "Web" y "Servicio web (ASMX)" debajo de eso. Copié todo mi código anterior de código subyacente, luego tomé nota del espacio de nombres que le dio al nuevo archivo en mi nuevo proyecto, luego pegué todo mi código anterior en el nuevo archivo de código subyacente en el nuevo proyecto y puse el espacio de nombres volver a lo que había sido.
Luego creé mis carpetas en mi proyecto que tenía antes de usar Visual Studio para hacer "Agregar"> "Nueva carpeta", luego copié de nuevo mis archivos en las carpetas de mi otro proyecto usando el Explorador de Windows, luego hice clic derecho en cada carpeta en Visual Studio e hizo "Agregar"> "Elemento existente ..." y sacó los elementos de esas carpetas en las carpetas de Visual Studio de mi nuevo proyecto. Hice referencia a todos mis ensamblados .NET nuevamente, teniendo ambos proyectos abiertos para poder comparar a cuáles había hecho referencia anteriormente (había varios). Tuve que nombrar mi nuevo proyecto un poco diferente, básicamente hice algo comparable a "GeneralWebApp" en lugar de "MyWebApp", por ejemplo, así que tuve que hacer un "Reemplazar todo" en toda mi solución para reemplazar ese nombre,
Luego hice un "Reconstruir todo" en el proyecto, luego lo inicié con el botón "Reproducir" que Visual Studio da cuando logré que se compile correctamente. Funcionó bien. Entonces lo publiqué, y todo estaba bien en el servidor donde lo publiqué, cuando lo ejecuté desde allí. No tengo una explicación de lo que pasó, pero así fue como lo supere. No es una mala prueba solo para ver si algo que está haciendo Visual Studio lo ha estropeado.
fuente
Si coloca solo la carpeta bin en IIS (después de construir el proyecto), este problema también ocurrirá. En esta situación, debe publicar el proyecto con VisualStudio y luego colocar la carpeta publicada en IIS.
fuente
¿Qué tipo de solicitud HTTP está realizando?
Esta es una respuesta ligeramente del campo izquierdo, pero ¿ha intentado eliminar la página de error predeterminada de IIS para 404 para verificar lo que su API realmente está devolviendo?
Tuve un problema por el cual quería que un método de controlador devolviera un 404 cuando publiqué la identificación incorrecta. Descubrí que siempre obtenía la página "Archivo o directorio no encontrado" de IIS 404 en lugar de la respuesta HTTP de mi API. La eliminación de la página de error 404 predeterminada resolvió el problema.
Problema diferente, pero nunca se sabe que puede ayudar;)
fuente
Esta pieza de configuración en el archivo web.config puede ayudarme a mí: en la sección system.webServer:
fuente
Recientemente tuve un error 404 no encontrado con todas mis rutas / controladores de Web Api 2. Así que fui al servidor real e intenté navegar usando localhost en lugar del nombre de host y obtuve "404.7 Not Found - El módulo de filtrado de solicitudes está configurado para denegar la extensión del archivo".
Esta publicación SO me ayuda a resolverlo.
fuente
Se resolvió para mí, cuando habilito la casilla de verificación para UrlRoutingModule-4.0:
Administrador de IIS> Módulos> seleccione UrlRoutingModule-4.0> Editar módulo> marque la casilla de verificación "Invocar solo para solicitudes de aplicaciones ASP.NET o controladores administrados".
fuente
Tuve el mismo problema: en una máquina recién instalada con Visual Studio 2013, el proyecto de la API web funcionaba con IISExpress, pero no con IIS local. Intenté todo lo que pude encontrar, pero al final el problema no era necesario con la API web, sino con MVC: incluso estaba instalado, no se estaba ejecutando ningún proyecto MVC.
Lo que funcionó para mí fue desinstalar IIS (de ADD / REMOVE Windows Features), luego reinstalarlo y luego ejecutar aspnet_regiis -i. Quizás esto ayude a alguien más.
fuente
Pasé mucho tiempo probando muchas cosas para finalmente darme cuenta de que estaba agregando mi aplicación web no en Sitios / Sitios web predeterminados, sino en otro sitio web vinculado a otro puerto. Obviamente, probar localhost en el puerto 80 daría un 404.
fuente
No hago nada, solo agregue esta etiqueta en web.config, está funcionando, este problema surge uno de los siguientes puntos
Use Web Api en el mismo proyecto usando formularios MVC o asp.net
Utilice RouteConfig y WebApiConfig en Global.asax como GlobalConfiguration.Configure (WebApiConfig.Register); RouteConfig.RegisterRoutes (RouteTable.Routes);
Use RouteConfig para 2 propósitos, formularios asp.net con enrutamiento friendlyurl y mvc para enrutamiento MVC
solo usamos esta etiqueta en web.config, funcionará.
fuente
Se encontró con el mismo problema con Web API y .Net Core Web API. Funcionó bien en VS 2017 durante la depuración, pero devolvió 404 cuando se publicó en IIS 7.5. La solución para mí fue cambiar la forma en que creé el sitio. En lugar de publicar en la raíz de un sitio web (creado haciendo clic derecho en Sitios ... Agregar sitio web), tuve que crear una aplicación (creada haciendo clic derecho en un sitio web ... Agregar aplicación) y publicar en esa carpeta. Tenga en cuenta que para la versión Core, tuve que cambiar la configuración de Application Pool .NET Framework Version a "No Managed Code".
fuente
Para mí, la solución fue eliminar las siguientes líneas de mi archivo web.config:
Noté que VS los había agregado automáticamente, no estoy seguro de por qué
fuente
Pruebe este webconfg .. reemplace "NewsApi.dll" con su dll principal!
fuente