Virtual Directory Root VS Root Web сайт
-
12-11-2019 - |
Вопрос
Я использую IIS 5.1, в котором у нас есть только один веб-сайт по умолчанию,
У меня есть два проекта v2 и v3
Мой сайт указывает на проекты V2 и иметь несколько папок изображений, стилей и т. Д. Теперь у меня есть виртуальный каталог на этом веб-сайте, который хостинг проекта V3 и имеет ту же иерархию папок, что и V2
на домашней странице обоих проектов у меня есть
img src="\ Images \ edlogo.gif" alt="logo" />
Но это показывает то же изображение, которое находится в каталоге V2, как я могу показать разные изображения для обоих проектов. Использование «\» получить корню веб-сайта, но как я могу получить корню виртуального каталога под этим веб-сайтом
Решение
Этот статический метод возвращает ваш полный 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"/>
. Другие советы
Используйте относительные URL-адреса.Смотрите Здесь e.g.«Изображения / 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?
Есть что-то отсутствие от вашего поста, вы можете опубликовать это, пожалуйста?
Вы можете использовать относительный путь
<img src="../images/edlogo.gif" alt="logo"/>
.
Ваш образец кода всегда получит его из корневого каталога.
Может быть, вы можете использовать HttpRuntime.AppDomainAppVirtualPath
или Request.ApplicationPath
.
Слишком генеракодицетагкод полезен.
Образец использования для моего виртуального каталога <Сильный> / v2
.HttpRuntime.AppDomainAppVirtualPath = /v2 Request.ApplicationPath = /v2 Request.FilePath = /v2/Inicio.aspx GetAppRootUrl(false) = http://localhost:2029/v2 Page.ResolveUrl("~") = /v2/
Обзор
http://msdn.microsoft.com/en--US / Библиотека / System.Web.virtualPactuctivy.aspx
Обзор <Сильные> System.Web.httprequest объект
http:// msdn.microsoft.com/en-us/library/system.web.htttrequest.filepath(v=vs.100 ).aspx
Public Function GetRoot() As String
Return System.Web.VirtualPathUtility.MakeRelative(Request.FilePath, Request.ApplicationPath)
End Function
.