ASP.NET MVC en IIS 7.5

338

Estoy ejecutando Windows 7 Ultimate (64 bits) con Visual Studio 2010 RC. Recientemente decidí que VS ejecutara / depurara mis aplicaciones en IIS en lugar del servidor de desarrollo que viene con él.

Sin embargo, cada vez que intento ejecutar una aplicación MVC, aparece el siguiente error:

Error HTTP 403.14 - Prohibido El servidor web está configurado para no enumerar el contenido de este directorio. Detallado

Información de error

Módulo DirectoryListingModule

Notificación ExecuteRequestHandler

Error de archivo estático del controlador

Código 0x00000000 solicitado

URL http: // localhost: 80 / mySite /

Ruta física C: \ myProject \ mySite \

Método de inicio de sesión Anónimo Inicio de sesión

Usuario anónimo

Coloqué un default.aspxarchivo en el directorio y recibí el siguiente error:

Error HTTP 500.21: el controlador interno de errores del servidor "PageHandlerFactory-Integrated" tiene un módulo incorrecto "ManagedPipelineHandler" en su lista de módulos

¿Hay otros pasos que olvidé tomar para que esto funcione?

Notas: instalé IIS 7.5 después de instalar VS 2010 RC. Utilicé el botón incorporado "Crear directorio virtual" debajo de la pestaña "Web" en las "Propiedades" del proyecto MVC en Visual Studio 2010. Me aseguré de que la aplicación utilizara el grupo de aplicaciones ASP.NET 4.

A continuación se muestran las características instaladas de IIS que tengo.

texto alternativo

Omar
fuente
De acuerdo, tengo un problema similar y solo aparece con los sitios web ASP.NET MVC 3. Los sitios web ASP.NET MVC 2 funcionan bien. Coloqué un archivo Default.aspx en la raíz del sitio web y lo recogí bien, no hay problema. He desplegado bin el sitio web ASP.NET MVC 3 usando VS2010 SP1 y todavía no me alegro. Estoy en mi ingenio final con esto.
Umar Farooq Khawaja
55
Estoy teniendo este mismo problema. Configuré la aplicación para usar 4.0 integrado, ejecuté el comando de registro para registrar .NET con IIS (7.5) y aún recibo este error.
Collin White
2
Por fin pude encontrar el problema en mi puesta a punto, que era que había cambiado el nombre del archivo _Layout.cshtmla _PageLayout.cshtmly había realizado el cambio correspondiente en el _ViewStart.cshtmltambién, pero al parecer eso no era suficiente. Una vez que volví el nombre a _Layout.cshtml, comenzó a funcionar. Lo confuso fue que _PageLayout.cshtmlse recogió correctamente en Win7 32 bit pero no se recogió en Win7 64 bit o WinSvr2K8 R2.
Umar Farooq Khawaja
3
¿Alguien ha encontrado una solución a esto en Windows 8 con IIS 8?
Eric Z Beard
3
Si está en Windows Server 2012 o en la ventana 8, vea esto: [ stackoverflow.com/questions/12134713/… [1]: stackoverflow.com/questions/12134713/…
Lomak

Respuestas:

499

ASP.NET 4 no estaba registrado en IIS. Tuve que ejecutar el siguiente comando en la línea de comando / ejecutar

Windows de 32 bits (x86)

% windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -ir

Windows de 64 bits (x64)

% windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ir

Nota del comentario de David Murdoch:

Que la versión .net ha cambiado desde que se publicó esta respuesta. Compruebe qué versión del marco está en el directorio% windir% \ Microsoft.NET \ Framework64 y cambie el comando en consecuencia antes de ejecutarlo (actualmente es v4.0.30319)

Omar
fuente
99
Tenga en cuenta el "64" en Framework64 para Windows de 64 bits! eso me mordió en el * ss. Debo haber instalado la versión de 32 bits 4 o 5 veces sin ningún efecto.
Ben Lesh
14
Que la versión .net ha cambiado desde que se publicó esta respuesta. Verifique qué versión del framework está en el %windir%\Microsoft.NET\Framework64directorio y cambie el comando en consecuencia antes de ejecutarlo (actualmente es v4.0.30319).
David Murdoch
1
para agregar a @blesh, si tiene 64 bits y ejecuta aspnet_regiis.exe de 32 bits, podría volver a mostrarle las opciones y no hacer nada
xster
3
Si el comando aspnet_regiis.exe no se encuentra en la carpeta .net framework, descargue el instalador completo de .net framework microsoft.com/download/en/…
warrickh
11
Esto no funciona en IIS8 por cierto, si intentas obtener "Esta opción no es compatible con esta versión del sistema operativo. En su lugar, los administradores deben instalar / desinstalar ASP.NET 4.5 con IIS8 usando" Activar / Desactivar las características de Windows " cuadro de diálogo, la herramienta de administración del Administrador del servidor o la herramienta de línea de comandos dism.exe. Para obtener más detalles, visite go.microsoft.com/fwlink/?LinkID=216771 ".
Mastro
199

Una cosa más para asegurarse de tener es el siguiente conjunto en su web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>
Mark Boltuc
fuente
23
Eso lo hizo por mí. Gracias
boca
55
También lo resolvió para mí. Extraño, funciona localmente en VS2010 IIS Express sin esa configuración.
Phil
8
Si no desea configurar runAllManagedModulesForAllRequests(que se ejecuta incluso para archivos estáticos) puede instalar una revisión de Microsoft: microsoft.com/download/en/… .
Justin Helgerson
10
Intente evitar esto agregando el módulo de enrutamiento: britishdeveloper.co.uk/2010/06/…
Chris Herring
Si está utilizando VS2013 y está intentando ejecutar IIS 7.5, debe agregar esto
KenL
77

Asegúrese de tener el siguiente conjunto en su web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>

Mejor solucion:

Aunque la solución anterior funciona absolutamente bien , puede causar otro problema ya que ejecuta todos sus módulos HTTP registrados en cada solicitud (incluso en cada solicitud de .jpg .gif .css .html .pdf, etc.) y obviamente es un desperdicio de recursos. En lugar

<system.webServer>
<modules>
  <remove name="UrlRoutingModule-4.0"/>
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" preCondition="" />
</modules>
</system.webServer>

Asegúrese de que el atributo preCondition esté vacío significa que se ejecutará en todas las solicitudes. [Leer más] ( http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , "Leer publicación original")

Premchandra Singh
fuente
66
Esto solucionó el 403.14 en la raíz y el 404 en otros métodos de controlador para mi aplicación MVC. Sin embargo, todavía hay algo sospechoso aquí, porque tengo otra aplicación ejecutándose en el mismo servidor con la misma configuración de sitio visible, y funciona sin esta configuración. Este es un web.config creado por una plantilla de proyecto SPA cortesía de VS 2012, funciona bien en mi caja pero no cuando se publica.
Shannon
44
Sí, por lo que mi dispositivo de desarrollo contenía <system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />, Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.configy parecía haber sido modificado en la fecha de mi instalación de VS 2012. Entonces, la siguiente pregunta es, ¿qué hay en mi otro proyecto que le permite funcionar?
shannon
Tenga en cuenta que aparentemente no es la %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -irrecomendada por la solución superior que establece los valores predeterminados que deben existir en mi dispositivo de desarrollo. Ese comando no me resuelve el problema una vez que elimino la referencia UrlRoutingModule.
shannon
Eso funciona en Windows Server 2008 R2 IIS 7 para ASP.NET MVC 5. ¡Gracias!
Ervi B
42

Otra razón por la que alguien podría recibir este error es si el archivo Global.asax ya no está en la carpeta raíz.

ZippyV
fuente
44
Sí, el instalador que escribí no trajo este archivo. ¡Gracias!
zadam
44
Este fue mi problema también. Nunca habría adivinado, basándose en el síntoma 403, que mi aplicación no tenía Global.asax
Saul Dolgin
3
También lo arreglé para mí: apagué la compilación previa en las opciones de publicación ( global.asaxsolo se ve afectado el archivo).
Richard
1
Esto me engañó. La cosa es que para mí, y escucho para muchos otros, global.asax se genera cada OTRA vez que publico. ¿Alguien encontró una manera de generarlo cada vez?
Greg Z.
Gracias, arreglaron mis problemas. La aplicación se ejecuta en ASP.NET MVC 4.0, Framework 4.0. Alojado en Arvixe.
Joe King
20

También recibí este error y descubrí que la "Redirección HTTP" no estaba activada en Windows Server. Esta publicación de blog también lo señala: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx

toddkitta
fuente
66
De todas las malditas cosas que podrían haber sido, esta es. Miré por todas partes y jugué con la configuración de seguridad durante unas horas, aspnet_regiis, y así sucesivamente. Dulce bebé Jesús en un desmenuzable rollo de kaiser.
Andrew Backer
He pasado un día entero para esto. Muchas gracias.
Pradeep
Para Windows 8, todavía recibí errores después de habilitar la redirección HTTP. Tuve que hacer esto como un segundo paso: agregar el rol de ASP.NET 4.5 en Internet Information Services -> Servicios de World Wide Web -> Características de desarrollo de aplicaciones serverfault.com/questions/514091/…
dreamerkumar
La segunda parada resolvió mi problema. Algunas máquinas funcionan sin él, pero otras son esenciales. Gracias.
Alexis Heijmeijer
15

Dulce Jesús. Probé todas las cosas anteriores (pero encontré mis configuraciones idénticas). AÚN OTRA SOLUCIÓN si tiene problemas:

http://support.microsoft.com/kb/980368

Intente instalar este KB para su sistema. Si está viendo 404s, puede ser porque no tiene esta actualización, ¡y el módulo isapi simplemente no se encuentra y no hay mucho que pueda hacer al respecto sin esto!

Sean Anderson
fuente
1
Resuelto para mí en un servidor de 32 bits que ejecuta Server 2008 SP2 (no R2)
Simon C
7

Para mí en una máquina virtual Azure Server 2012 R2 IIS 8.5 con una aplicación Asp.Net MVC 5 (bin implementado MVC 5) tuve que hacer lo siguiente desde un indicador de cmd elevado a pesar de que ya tenía 4.5 instalado:

dism /online /enable-feature /featurename:IIS-ASPNET45

Fuente: http://support.microsoft.com/kb/2736284

También fuerza bruta instalé todas las características de IIS con el siguiente PowerShell:

import-module servermanager
add-windowsfeature web-server -includeallsubfeature

Fuente: http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2

Ahora mi aplicación está funcionando.

Jon Kragh
fuente
El 'dism' funcionó para mí (sin aplicar ninguno de los otros cambios propuestos). Solo tuve que cambiar el interruptor '/ all' al final para asegurarme de que todas las funciones 'padre' también estuvieran instaladas.
Jeroen Ritmeijer
Esto funcionó para mí. Ejecutar MVC 5 con .NET 4.5 en Windows Server 2012. IIS por defecto no instalará .NET 4.5.
DPac
6

Tuvimos una aplicación MVC movida a un nuevo servidor. Se instaló .NET 4 y MVC 3, pero aún recibimos el "Error 403.14". En este caso, esto significaba que IIS no entendía que estaba tratando con una aplicación MVC, estaba buscando la página predeterminada.

La solución era simple: la redirección HTTP no estaba instalada en el servidor.

Administrador del servidor - Roles - Servidor web (IIS) - Servicios de roles - Redirección HTTP: no instalado. Lo instalé, problema resuelto.

Bjarne Havnen
fuente
1
¿Qué es el Administrador del servidor? ¿donde lo encuentro?
Elad Katz
El Administrador del servidor se encuentra en las Herramientas administrativas
udog
5

Además, si su aplicación está precompilada, debería tener

PrecompiledApp.config

en la carpeta raíz de su aplicación, de lo contrario podría obtener HTTP Error 403.14también.

pvasek
fuente
Tenía el archivo allí por alguna razón, aunque mi aplicación no está precompilada. Eliminó el archivo y funciona ahora. ¡Gracias!
vaindil
Yo sería muy feliz si vi esta respuesta antes de pasar 2 horas y resolver por mi cuenta ..
sotn
4

Otra posible solución, si se mueve alrededor de su global.asax, asegúrese de que el marcado apunte a la clase MvcApplication correcta. Esperemos que esto salve a alguien en el futuro.

AaronHS
fuente
4

Había usado la extensión WebDeploy IIS para importar mis sitios web de IIS6 a IIS7.5, por lo que todas las configuraciones de IIS eran exactamente como habían sido en el entorno de producción. Después de probar todas las soluciones proporcionadas aquí, ninguna de las cuales funcionó para mí, simplemente tuve que cambiar la configuración del grupo de aplicaciones para el sitio web de Classic a Integrated.

Michael Bianchi
fuente
4

Me he encontrado con el mismo problema 404.14 de repente. Finalmente, el problema se solucionó desmarcando "precompilar durante la publicación" en la configuración del perfil de publicación.

usuario985287
fuente
Igual que aquí. La publicación no fue un problema hasta hoy: la desactivación de la resolución lo resolvió. Extraño de todos modos
Sir Rufo
4

Modifiqué mi ruta predeterminada en un punto de:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }

A:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index" }

Lo que me dio tu error. Me alegra que alguien haya mencionado las rutas porque probablemente habría estado en esto para siempre.

Nate-Wilkins
fuente
4

En mi caso, ASP.NET 4.5 no está instalado en el servidor, por lo que la instalación de ASP.NET 4.5 solucionó el problema.

Saif
fuente
4

Puede resolver este error ejecutando cmd como administrador que ingrese la descripción de la imagen aquí

Haga lo mismo que en la imagen para Windows de 32 bits

Simplemente realice cambios en 64 bits como framework64 en lugar de solo framework. Luego vaya a iis y actualice el sitio.
Si aún tiene algún error, realice cambios en el grupo de aplicaciones.


fuente
3

Tuve otro problema que me llevó a este problema.

  • Me aseguré de que mi grupo de aplicaciones ejecutara .net 4 en modo integrado
  • Había ejecutado aspnet_regiis.exe -i
  • Verifiqué que los permisos de carpeta estuvieran configurados correctamente para la cuenta que ejecuta mi grupo de aplicaciones

Ninguna de estas cosas funciona. Resultó que en mi web.config bajo system.webserver> módulos tenía lo siguiente:

<remove name="WindowsAuthentication" />

Obviamente, esto eliminó el módulo de autenticación de Windows que parecía de alguna manera dejar todo fuera de control.

¡Espero que esto ayude a alguien, ya que me costó la mayor parte de una noche!

Paul Suart
fuente
3

La interfaz de usuario es un poco diferente en las versiones más recientes de Windows Server. Aquí es donde debe habilitar ASP.Net para que funcione en IIS

Fix IIS y Asp.net

Matthew Zourelias
fuente
2

Agregar otra solución para este problema.

en mi archivo Global.asax.cs había deshabilitado el intento de archivos php de ser consumidos por la tubería MVC usando lo siguiente:

routes.IgnoreRoute( "{*php}" );

Lo había hecho anteriormente en un proyecto MVC2 y funcionó bien, pero hacerlo en mi aplicación MVC 3 causó el problema mencionado anteriormente.

TheRightChoyce
fuente
2

Otra razón más por la que esto puede suceder: usted RouteConfig.cso WebApiConfig.csno son válidos.

En mi caso, tenía una ruta definida como tal (tenga en cuenta el paréntesis en lugar de la llave):

...
routeTemplate: "api/(something}"
...
Terry
fuente
¡Esto funciona para mi! En caso de que haya cambiado routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );. Cuando me fijo id = UrlParameter.Optionalen repositoryId = UrlParameter.Optionalque comenzar a trabajar!
Dmitresky
2

Tenga en cuenta que para los usuarios de Windows 8 necesita agregar / eliminar componentes de Windows y eliminar la versión de reinicio de .net y luego reinstalar para poder registrarlo en IIS. Supongo que esto sucede si obtienes .net 4.5 de Visual Studio e instalas IIS después.

Lee.Invierno
fuente
2

Por extraño que parezca, reinstalar IIS fue lo que funcionó para mí, con el siguiente comando ejecutado desde dentro de la carpeta de la versión .net:

aspnet_regiis.exe /i

ingrese la descripción de la imagen aquí

Cuando ejecuté este comando por primera vez, comencé a recibir el error HTTP 403.14. Pero una vez que ejecuté el comando nuevamente, resolvió el problema.

Obs : Otra cosa que también hice fue eliminar HTTP Redirect de las funciones del servidor en la pantalla de Administración del servidor antes de volver a instalar IIS. Quizás esto también tuvo un impacto en la solución del problema, pero no estoy seguro. Por lo tanto, si la reinstalación de IIS aún no funciona, intente eliminar HTTP Redirect e intente nuevamente. Esperemos que también funcione para ti.

Ulises Alves
fuente
FYI aspnet_regiis.exeno instala ni reinstala IIS, solo registra una versión particular de .NET Framework, para que IIS pueda usarla para alojar aplicaciones.
Stephen
1

Para resolver este problema sin tener que recurrir al modo de 32 bits, deberá actualizar el código fuente de este proyecto

public static void RegisterUrlRoutesFromAttributes(RouteCollection routes)
{
    // Enumerate assembly for UrlRoute attributes.
    List<MapRouteParams> routeParams = new List<MapRouteParams>();
    AppDomain.CurrentDomain.GetAssemblies()
        .ToList()
        .ForEach(assembly => routeParams.AddRange(GetRouteParamsFromAttributes(assembly)));

He planteado este problema como una discusión en el panel de discusión en el proyecto codeplex de la nube de TI.

http://itcloud.codeplex.com/discussions/262000

Omar
fuente
1

Esto funcionó para mí y podría ser útil para otro.

Quizás todos los componentes requeridos no están presentes o no están registrados correctamente. Para resolver esto, intente desmarcar todas las opciones dentro del Panel de control -> Activar o desactivar las características de Windows -> Servicios de información de Internet -> Servicios de World Wide Web -> Características de desarrollo de aplicaciones, desmarque todas las opciones y vuelva a marcar todo, luego reinicie el IIS y Compruebe si el problema está resuelto.

ingrese la descripción de la imagen aquí

MirlvsMaximvs
fuente
1

Si está ejecutando IIS 8.5 en Windows 8 o Server 2012, es posible que ejecutar mvc 4/5 (.net 4.5) no funcione en un directorio virtual. Si crea una entrada de host local en el archivo de host para que apunte a su máquina local y luego apunte un nuevo sitio web local de IIS a esa carpeta (con la entrada de encabezado de host correspondiente), encontrará que funciona.

Mastro
fuente
0

Creé un nuevo espacio de nombres (y, por lo tanto, una carpeta) idéntico a la ruta a un controlador (por ejemplo, MvcApp/Test/SomeClasses.csy MvcApp/Controllers/TestController.cs). ¡Esto también resultó en un 403.14!

Papa Mufflon
fuente
0

Para mí, la solución fue agregar el paquete NuGet Microsoft.AspNet.WebPages (más sus dependencias de Razor e Infraestructura) a mi proyecto web.

La infraestructura tuvo que ser reinstalada a la fuerza ya que no se agregó como referencia al principio.

Mathieu Diepman
fuente
0

En mi caso, .NET CRL Version en Application pool prppertires se configuró en Sin código administrado (no sé por qué). Establecerlo en .NET CRL Versión v4.0.30319 resolvió el problema.

Eugene Rozhkov
fuente