ASP.NET MVC要求我重新验证PNG文件,而不是GIF或JPEG

时间:2010-10-09 00:50:59

标签: asp.net css asp.net-mvc image iis

出于某种原因,只要我从application.css文件中引用PNG,就会提示我输入凭据。但是,我可以毫无问题地从我的图像目录中引用GIF,JPEG等。

我的路线设置如下:

public static void RegisterRoutesTo(RouteCollection routes) {

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("elmah.axd");
        routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

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

        routes.MapRoute(
            "Session", "{action}",
            new { controller = "Session" },
            new { action = "(login|logout|register)" }
        );

        routes.MapRoute("CatchAll",  "{*catchall}",
            new { controller = "Error", action = "NotFound" });
    }

在我的CSS中,我有这个:

.iconLocationLarge { background-image: url(../images/icon_vcarea_48x48.png) !important;}
.iconVCLarge { background-image: url(../images/tb-btn-sprite.gif) !important;}

问题是,如果我使用PNG但不使用GIF,则会提示我再次进行身份验证。为什么呢?

3 个答案:

答案 0 :(得分:2)

IIS可以直接提供内容而无需将请求传递给ASP.NET。我怀疑你的情况是IIS设置为服务GIF和JPG而不是PNG。有关该主题的讨论,请参阅示例http://mvolo.com/blogs/serverside/archive/2006/11/10/Stopping-hot_2D00_linking-with-IIS-and-ASP.NET.aspx。另请参阅http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/4c840252-fab7-427e-a197-7facb6649106.mspx?mfr=true

假设这是IIS6,从管理工具打开IIS管理器,右键单击本地计算机节点,单击MIME类型,检查PNG是否已注册为“image / png”。您也可以在单个网站级别配置它。

确保没有其他过滤器可能导致此问题,例如UrlScan ISAPI过滤器。

答案 1 :(得分:2)

终于解决了:

我引用的PNG文件已加密。就是这样。

最后用IIS和ASP.NET耗尽了所有其他选项后,我注意到我引用的每个PNG文件都有“AE”属性(E =加密)。所以解决方案是右键单击文件夹,单击“高级”按钮并取消选择“加密”选项。

答案 2 :(得分:0)

我不知道为什么,但可能你应该为所有静态内容添加忽略路由,无论如何。

ASP.NET MVC thinks my virtual directory is a controller