2011-06-08 8 views
30

Solicitudes para mis archivos de imagen css, js, se están sirviendo a través de la interconexión de ASP.NET. Pensé que IIS por defecto lo evitó, pero veo las solicitudes en mi punto de corte Application_AuthenticateRequest y no hay necesidad de autenticar realmente esas solicitudes. He visto enfoques conflictivos para cambiar este comportamiento. ¿Cuál es la mejor manera de hacer esto?Impedir que IIS sirva archivos estáticos a través de la canalización de ASP.NET

Respuesta

34

estoy tomando una conjetura aquí y sospecha que tiene el siguiente ajuste configurado en el archivo de web.config:

<modules runAllManagedModulesForAllRequests="true"> 

Esto significa que todas las solicitudes, incluyendo las de contenido estático está golpeando la tubería.

Cambiar este valor para:

<modules runAllManagedModulesForAllRequests="false"> 

Esto es suponiendo que su aplicación se ejecuta en ASP.NET 4.0 y MVC3.

Para que esto funcione, debe instalar KB980368 (requiere un reinicio) o Windows 2008R2 SP1 (que incluye este hotfix). La razón de esto se explica en este excelente artículo:

How ASP.NET MVC Routing Works and its Impact on the Performance of Static Requests

+0

esto funciona, pero REALMENTE no quiero cambiar esa configuración, ya que afecta a otras cosas. esperando una alternativa – kenwarner

+1

@qntmfred - oh, hola otra vez :). ¿Alguna posibilidad de que pueda actualizar su pregunta y explicar lo que quiere decir con * "ya que afecta a otras cosas" *? – Kev

+0

seguro, pero tengo que recordar lo que era primero>. < – kenwarner

0

En algún lugar de su configuración de IIS o de un web.config, tiene una asignación de controlador configurada para asignar estos archivos a su aplicación ASP.Net.

Intente eliminar su web.config y vea si todavía puede navegar a estos tipos de archivos desde IIS sin ASP.Net. Si eso falla, sabrá que es su web.config; de lo contrario, deberá verificar la configuración de IIS.

Paso 2 - Ponga la web.configs nuevamente, luego elimine y vuelva a crear el sitio - ¿el mismo problema? Es una configuración en la raíz de IIS, lo que significa que se aplica a todos los sitios: compruebe las asignaciones de controladores aquí.

12

acabé añadiendo esto a mi web.config. Sé que todos mis archivos estáticos existirán en estas carpetas, por lo que funciona bien para mis necesidades.

<location path="scripts"> 
    <system.web> 
     <authentication mode="None" /> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 
<location path="styles"> 
    <system.web> 
     <authentication mode="None" /> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 
<location path="images"> 
    <system.web> 
     <authentication mode="None" /> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 
+0

¿Se permiten múltiples valores en el atributo 'ruta'? Según el siguiente enlace, no son: http: // stackoverflow.com/questions/4608764/specify-more-one-directory-in-web-configs-location-path-element – UserControl

+0

Eso es una lástima. –

+6

esto solo evita la autenticación, pero las solicitudes de archivos estáticos todavía están llegando a los módulos administrados. @Kev tiene la respuesta correcta. – vtortola

1

En VS2012/MVC3 con Visual Studio Development Server activado, el RAMMFAR = falso no tiene ningún efecto. Cada solicitud de archivos estáticos todavía golpea al controlador de eventos Application_BeginRequest.

Cambié a IIS Express y vi la funcionalidad deseada.

Cuestiones relacionadas