ASP.NET MVC: файл CSS, возвращающий ошибку 302, если существует - PullRequest
9 голосов
/ 23 февраля 2012

Сегодня утром я получаю сообщение об ошибке 302 для одного файла CSS на сайте ASP.NET MVC 2 в localhost, и я не знаю, что изменилось бы, чтобы вызвать это.

Localhostсайт использует IIS 7.5, хотя у меня был ограниченный опыт работы с IIS, поэтому я не особо задумывался о том, что там происходит.

URL-адрес файла CSS:

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

и заголовок местоположения в ответе выглядит следующим образом:

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

Это заставляет меня думать, что MVC перенаправляет статический файл или что-то в этом роде, однако если бы это было так, то я быожидаю, что все мои изображения, файлы CSS и JavaScript будут делать то же, что и они.На всякий случай, вот упрощенная версия RegisterRoutes() в 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" }
    );
}

Кроме того, если я изменю имя моего CSS-файла на Site2.css и ссылаюсь на него вместо этого, то же самоеслучается.

Что происходит?

Ответы [ 2 ]

10 голосов
/ 23 февраля 2012

Перенаправление на метод входа в систему делает его похожим на это из-за разрешений на каталог или файл, а не на маршрут MVC, перехватывающий его. (Если бы он был перехвачен маршрутом MVC, это, скорее всего, привело бы к ошибке, определяющей, какой контроллер и / или действие использовать.)

ASP.NET MVC сам оставляет статические файлы в покое, но если ASP.NET в целом решит, что анонимный пользователь не имеет доступа к файлу CSS или его каталогу, ASP.NET перенаправит на URL-адрес входа в систему, это будет действие ASP.NET MVC.

9 голосов
/ 23 февраля 2012

Похоже, что правила авторизации в web.config говорят, что вы должны пройти аутентификацию, чтобы увидеть страницы css.Вы должны быть в состоянии доказать это, войдя в систему и посмотрев, можно ли получить файл css для правильного обслуживания.

Я бы добавил раздел местоположения в web.config, чтобы удалить требование авторизации для содержимогокаталог.Взято из 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>
...