Разбитые изображения на IIS7 - PullRequest
4 голосов
/ 22 января 2010

У меня есть сайт 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
    );
}

EDIT:

Я ссылаюсь на весь контент, используя шаблон T4MVC. Шаблон корректен, если он указывает пути с помощью ~ / content /. Проблема в том, что когда генерируется html, вывод не содержит «~», это просто /content/.

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

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

Примечание:

На самом деле проблема заключалась в том, что с этой строкой в ​​web.config что-то не так. Оказывается, 1 января 2011 года - не пятница, а суббота. По какой-то причине ему все еще не нравилась эта строка.

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

Изменение на это работает просто отлично;

<clientCache cacheControlMode="UseExpires" httpExpires="Tue, 19 Jan 2038 03:14:07 GMT" />

Добавление его сюда в надежде, что это поможет другим в этом вопросе.

Спасибо!

Ответы [ 5 ]

2 голосов
/ 22 января 2010

Вряд ли это будет настройка маршрута или IIS. Я видел это в основном потому, что либо ресурсы недоступны, то есть отсутствуют.

Также иногда была установлена ​​защита для папок, к которым вы пытаетесь получить доступ, и пользователю .net по умолчанию не был предоставлен доступ.

Пути к ресурсам не закодированы правильно. использование ~ / content вместо / content или даже ../../..etc может помочь.

1 голос
/ 04 февраля 2010

Не уверен, что понимаю проблему. Для T4MVC было бы неправильно выводить ~ / path к клиенту, поскольку ~ / это синтаксис на стороне сервера, который браузеры не понимают. Обратите внимание, что вы можете изменить эту обработку, если хотите, перейдя к 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 голос
/ 22 января 2010

Попробуйте проверить права доступа к вашей папке - вы находитесь в нестандартной папке (не wwwroot)? Убедитесь, что группа IIS_IUSRS имеет разрешения на чтение и выполнение для папки и подпапок. Если это не сработает, попробуйте изменить разрешения, чтобы временно предоставить всем полный доступ, просто чтобы посмотреть, является ли это проблемой с разрешениями.

1 голос
/ 22 января 2010

Убедитесь, что для действий по сборке задано значение Content.

0 голосов
/ 20 апреля 2019

Перейдите на свой сайт или в веб-приложение -> Аутентификация -> Включить анонимную аутентификацию. Если это работает, вы можете оставить так, если вам это нравится, или правильно настроить разрешения.

...