IIS7上出现的图片损坏问题

4

我有一个ASP.NET MVC网站,本地运行良好。但是一旦将该网站部署到IIS 7上,所有资源的链接都会失效(例如脚本文件、图像和CSS文件)。这可能是路由问题还是IIS设置问题?

以下是我的路由:

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

    routes.MapRoute(
        "Search",
        "Basic/Page/{page}",
        new { controller = "Search", action = "Basic" }
    );

    routes.MapRoute(
        "Default",                                                                          // Route name
        "{controller}/{action}/{id}",                                                       // URL with parameters
        new { controller = MVC.Welcome.Name, action = MVC.Welcome.Actions.Index, id = "" }  // Parameter defaults
    );
}

编辑:

我使用T4MVC模板引用所有内容。当模板使用~/content/指定路径时,模板是正确的。问题在于生成HTML时,输出不包括“~”,只有/content/。

<img src="<%= Links.Content.Images.logo_png %>" alt="Logo" />

<img src="/Content/Images/logo.png" alt="Logo" />

注意:

实际问题是web.config文件中这一行存在问题。事实证明,2011年1月1日不是星期五而是星期六。出于某种原因,它仍然不喜欢那一行。

<clientCache httpExpires="Fri, 1 Jan 2011 15:30:00 UTC" cacheControlMode="UseExpires"/>

将其更改为以下内容即可正常运行:
<clientCache cacheControlMode="UseExpires" httpExpires="Tue, 19 Jan 2038 03:14:07 GMT" />

希望这里的内容可以帮助其他人解决这个问题。
谢谢!

griegs和Dave的回答似乎能帮到你。 - Shantanu Gupta
目前我已经确定问题出在T4MVC上,但是现在仍然存在这个问题。 - Lukasz
5个回答

2

这很可能不是路由或IIS设置的问题。我经常看到这种情况是因为资源不可用,即不存在。

有时候,您尝试访问的文件夹的安全性已被设置,但默认的.NET用户未被授予访问权限。

资源路径编码不正确。使用“~/content”而不是“/content”甚至是“../../..等”可能会有所帮助。


所以我找到了问题,它是路径的问题。问题在于我正在使用T4MVC,路径在T4模板中似乎是正确的,它使用~/content作为路径。但是当网站运行时,路径变成了/content。至少谢谢,我有一个开始的地方。 - Lukasz

1

我不确定我理解了问题。T4MVC 输出 ~/ 路径到客户端是错误的,因为 ~/ 是服务器端语法,浏览器无法理解。请注意,您可以通过转到 T4MVC.settings.t4 来更改此处理方式,其中包含:

// You can change the ProcessVirtualPath method to modify the path that gets returned to the client.
// e.g. you can prepend a domain, or append a query string:
//      return "http://localhost" + path + "?foo=bar";
private static string ProcessVirtualPathDefault(string virtualPath) {
    // The path that comes in starts with ~/ and must first be made absolute
    string path = VirtualPathUtility.ToAbsolute(virtualPath);

    // Add your own modifications here before returning the path
    return path;
}

所以你可以让它返回任何你想要的,但我不认为返回 ~/ 路径会对你有帮助。

我可能有点误解了这个问题。


1

请确保构建操作已设置为内容。


所有文件都设置为内容。好主意,我没有想到那个。一定是其他原因! - Lukasz
前几天发生了这样的事情...一个PDF文件没有设置好,也从未移动到服务器上。 - Martin

1

尝试检查您的文件夹权限 - 是否在非标准文件夹(不在wwwroot中)?确保IIS_IUSRS组具有文件夹及其子文件夹的读取和执行权限。如果无法解决问题,请尝试更改权限,暂时授予每个人完全控制权,以查看是否存在权限问题。


0

前往您的网站或Web应用程序 ->身份验证 ->启用匿名身份验证。如果这样可以正常工作,您可以保持原样,如果需要,可以适当调整权限。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接