2016-01-07 3 views
0

Я использую Asp.Net MVC 5. Предположим по этому вопросу, что мое приложение подается с localhost:9000/app.Устранение изображения uri относительно корня приложения

Я получил это в моем _layout.cshtml:

<img src="@Url.Content("~/Content/logo.png")" /> 

Когда пользователь запрашивает localhost:9000/app/foobar, образ URI правильно решил localhost:9000/app/Content/logo.png.

Но когда пользователь запрашивает localhost:9000/app/folder/bender_is_great, URI изображения разрешает localhost:9000/app/folder/Content/logo.png.

Как получить URI изображения, чтобы всегда разрешать относительно корня приложения, а не относительно запрошенного пути?

Редактировать: Server.MapPath("~/Content/logo.png") имеет ту же проблему. Он разрешается относительно запрошенного пути, а не корня приложения.

+2

Это должно работать нормально! У вас есть какие-либо настраиваемые конфигурации маршрутов? – Shyju

+0

Нет, только основная конфигурация маршрута HomeController, которая поставляется с проектами MVC. Оказывается, это мои правила перезаписи URL. – Amy

ответ

1

Оказывается, это мои правила переписывания URL-адресов для дружественных URL-адресов HTML5 без hashbang (#!). Механизм перезаписи установил элемент в приложении: "IIS_WasUrlRewritten". Url.Content(...) обращает внимание на этот предмет и изменяет его поведение. Это Microsoft Support page говорит:

Для решения тильды обозначения к переписаны URL, используя такое же поведение, как и в веб-страницы Razor V2, установить контекст IIS_WasUrlRewritten ложь в каждой веб-странице или в Application_BeginRequest в Global.asax для глобальные настройки следующим образом:

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    Context.Items["IIS_WasUrlRewritten"] = false; 
} 

Примечание изменение контекста IIS_WasUrlRewritten влияет тильды обозначения не только в HTML-элементов, но и в вспомогательных методов MVC. Например, если для него установлено значение false, нотация тильды в Url.Content и Html.ActionLink вернет перезаписанные URL-адреса.

До сих пор этот код не вызывал проблем с моим приложением и разрешил проблему.