2012-02-22 19 views
7

Recibo un error 302 volviendo en un único archivo CSS en un sitio ASP.NET MVC 2 en localhost esta mañana y no sé qué haría han cambiado para causar esto.ASP.NET MVC: archivo CSS que devuelve un error 302 cuando existe

El sitio localhost usa IIS 7.5, aunque he tenido una experiencia limitada con IIS, así que no he analizado mucho de lo que podría estar pasando allí.

La URL para el archivo CSS es:

http://localhost/MySite/Content/Site.css?v=16 

y la cabecera de ubicación en la respuesta se parece a esto:

/MySite/Account/Login?ReturnUrl=%MySite%2fContent%2fSite.css%3fv%3d16&v=16 

Esto me hace pensar que MVC está redirigiendo el archivo estático o algo así, sin embargo, si ese fuera el caso, entonces esperaría que todas mis imágenes, CSS y archivos de JavaScript hicieran lo mismo que ellos. Por si acaso, aquí es una versión simplificada de RegisterRoutes() en Global.ascx:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute("", "Account/{action}/", new { controller = "Account" }); 
    routes.MapRoute("", "{action}", new { controller = "Home", action = "Index" }); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults    
    ); 

    routes.MapRoute(
     "Error", 
     "{*url}", 
     new { controller = "Home", action = "ResourceNotFound" } 
    ); 
} 

Además, si cambio el nombre de mi archivo CSS para Site2.css y referencia que en cambio, ocurre lo mismo.

¿Qué está pasando?

Respuesta

8

El redireccionamiento al método de inicio de sesión hace que parezca que esto se debe a permisos en el directorio o el archivo en lugar de una ruta MVC que lo atrapa. (Si fue capturado por una ruta MVC, probablemente resultaría en un error para determinar qué controlador y/o acción usar).

ASP.NET MVC deja archivos estáticos solo, pero si ASP.NET en general decide que el usuario anónimo no tiene acceso al archivo CSS o su directorio, ASP.NET redirigirá a la URL de inicio de sesión, que será una acción MVC de ASP.NET.

+1

Ahh eso es todo. Era un problema de permisos en ese archivo CSS específico en lugar de todo el directorio de contenido (lo que habría hecho que ocurriera lo mismo para todo el contenido estático). Sin embargo, aún no estoy seguro de cómo se cambiaron esos permisos. Dar derechos a la cuenta que AppPool estaba usando para la autorización solucionó el problema. – ajbeaven

+0

Tuve el mismo problema y fueron los permisos en el archivo en sí y no solo en el directorio. – EtienneT

+1

Ya lo comprobé, esta respuesta me hizo volver a verificar ... el mío no estaba solo en el archivo, pero me hizo revisar los permisos por quinta vez, ya que confirmó lo que había pensado ... en mi caso, mi entorno comparado abofeteó a "Usuarios "grupo en la carpeta de sitios. No diría que es una buena práctica, simplemente resultó ser el grupo al que le faltaba el medio ambiente. El uso de IUSR trabajó directamente, por supuesto, pero los mantuve emparejados para evitar confusiones. – Tony

8

Parece que las reglas de autorización en el web.config dicen que debe autenticarse para ver las páginas CSS. Debería poder probarlo iniciando sesión y viendo si puede hacer que el archivo css se sirva correctamente.

Agregaría una sección de ubicación a web.config para eliminar el requisito de autorización en el directorio de contenido. Tomado de http://support.microsoft.com/kb/316871

<!-- This section gives the unauthenticated user access to all of the files that are stored in the Content folder. --> 
<location path="content"> 
<system.web> 
    <authorization> 
     <allow users ="*" /> 
    </authorization> 
</system.web> 
</location> 
+0

+1 buena idea. Implementaré esto también. – ajbeaven

Cuestiones relacionadas