Виртуальный каталог root против корневого сайта по умолчанию - PullRequest
2 голосов
/ 11 февраля 2011

Я использую iis 5.1, в котором у нас только один веб-сайт по умолчанию,

У меня есть два проекта v2 и v3

мой сайт указывает на проекты v2 и имеет несколько папок с изображениями, стилями и т. Д. Теперь у меня есть виртуальный каталог на этом веб-сайте, на котором размещен проект v3 и иерархия папок которого совпадает с v2

.

на главной странице обоих проектов у меня есть

img src = "\ images \ edlogo.gif" alt = "logo" />

но это показывает то же изображение, которое находится в каталоге v2, как я могу показать разные изображения для обоих проектов. с помощью "\" получить корень веб-сайта, но как я могу получить корень виртуального каталога на этом веб-сайте

Ответы [ 5 ]

4 голосов
/ 29 апреля 2011

Этот статический метод возвращает вам полный http-путь к корневой папке вашего приложения (веб-сайт или виртуальный каталог)

public static string GetAppRootUrl(bool endSlash) { 
   string host = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);
   string appRootUrl = HttpContext.Current.Request.ApplicationPath;
   if (!appRootUrl.EndsWith("/")) //a virtual
   {
       appRootUrl += "/";
   }
   if (!endSlash)
   {
       appRootUrl = appRootUrl.Substring(0, appRootUrl.Length - 1);
   }
   return host + appRootUrl;
}

Итак, вы можете написать на своей странице:

<img src="<%= Server.HtmlEncode(GetAppRootUrl(false)) %>/images/edlogo.gif" alt="logo"/>
1 голос
/ 09 декабря 2015

Может быть, вы можете использовать HttpRuntime.AppDomainAppVirtualPath или Request.ApplicationPath.

Слишком Page.ResolveUrl("~") полезно.

Пример использования моего виртуального каталога / v2

    HttpRuntime.AppDomainAppVirtualPath = /v2
    Request.ApplicationPath = /v2
    Request.FilePath = /v2/Inicio.aspx
    GetAppRootUrl(false) = http://localhost:2029/v2
    Page.ResolveUrl("~") = /v2/
1 голос
/ 11 февраля 2011

Используйте относительные URL. Смотри здесь например "images / bg.jpg" на странице "http://v2/default.html" будет указывать на" http://v2/images/bg.jpg", в то время как тот же код на странице "http://v2/v3/default.html" будет указывать на" http://v2/v3/images/bg.jpg"

Итак, ваш код становится:

img src="images\edlogo.gif" alt="logo"/>

Однако неприятным побочным эффектом является то, что вы не можете перемещать свою домашнюю страницу в структуре каталогов своего веб-сайта, не разрывая ссылку.

Мне любопытно, однако, почему вы выбрали бы такой тип настройки? Разве не было бы проще сделать v3 веб-сайтом и поместить его на тот же уровень каталогов, что и v2?

1 голос
/ 11 февраля 2011

что-то отсутствует в вашем сообщении, вы можете опубликовать это, пожалуйста?

Вы можете использовать относительный путь

 <img src="../images/edlogo.gif" alt="logo"/>

Ваш образец кода всегда будет получать его из корневого каталога.

0 голосов
/ 11 февраля 2013

Обзор System.Web.VirtualPathUtility Класс и методы (.Net 2.0 и более поздние версии)

http://msdn.microsoft.com/en-us/library/system.web.virtualpathutility.aspx

Отзыв System.Web.HttpRequest Объект

http://msdn.microsoft.com/en-us/library/system.web.httprequest.filepath(v=vs.100).aspx

Public Function GetRoot() As String
    Return System.Web.VirtualPathUtility.MakeRelative(Request.FilePath, Request.ApplicationPath)
End Function
...