【问题标题】:ASP.NET MVC: CSS file returning a 302 error when it existsASP.NET MVC:CSS 文件存在时返回 302 错误
【发布时间】:2012-02-22 20:42:31
【问题描述】:

今天早上,我在 localhost 的 ASP.NET MVC 2 站点上的单个 CSS 文件上返回 302 错误,我不知道会发生什么变化。

本地主机站点使用 IIS 7.5,虽然我在 IIS 方面的经验有限,所以我没有过多研究那里可能发生的事情。

CSS 文件的 URL 是:

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

响应中的位置标头如下所示:

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

这让我认为 MVC 正在重定向静态文件或类似的东西,但是如果是这样的话,那么我希望我的所有图像、CSS 和 JavaScript 文件都在做同样的事情,而他们不是。以防万一,这里是 Global.ascx 中RegisterRoutes() 的简化版本:

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 并引用它,同样的事情也会发生。

发生了什么事?

【问题讨论】:

    标签: asp.net-mvc iis routing http-status-code-302


    【解决方案1】:

    重定向到登录方法使它看起来是因为目录或文件的权限而不是 MVC 路由捕获它。 (如果它被 MVC 路由捕获,则可能会导致错误决定使用哪个控制器和/或操作。)

    ASP.NET MVC 本身只保留静态文件,但如果 ASP.NET 通常认为匿名用户无权访问 CSS 文件或其目录,则 ASP.NET 将重定向到登录 URL,这将是一个 ASP.NET MVC 操作。

    【讨论】:

    • 啊,就是这样。这是该特定 CSS 文件而不是整个内容目录的权限问题(这会使所有静态内容发生相同的事情)。但是,仍然不确定这些权限是如何更改的。向 AppPool 用于授权的帐户授予权限解决了该问题。
    • 我有同样的问题,它是文件本身的权限,而不仅仅是目录。
    • 我已经检查过了,这个答案让我再次检查..我的不只是在文件上,但它让我第五次检查权限,因为它证实了我的想法..在我的如果我比较的环境在站点文件夹上拍打“用户”组。不会说这是最佳实践,只是碰巧是环境缺少的组。直接使用IUSR当然有效,但我让它们保持匹配以防止混淆。
    【解决方案2】:

    看起来 web.config 中的授权规则说您必须经过身份验证才能看到 css 页面。您应该能够通过登录并查看是否可以正确提供 css 文件来证明这一点。

    我会在 web.config 中添加一个 location 部分,以删除对内容目录的授权要求。取自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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 2017-09-13
      • 2012-10-22
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 2014-10-11
      相关资源
      最近更新 更多