ASP.NET предлагает замечательную возможность ссылки сразу на виртуальный корень сайта в виде знака ~. Но это работает только для серверной ссылки.
Иногда, по разным причинам требуется, требуется формировать HTML в aspx файле примерно так:
<a href=<%=ServerFormedURL%> title="Супер" ...
В этом случае в ServerFormedURL вставлять '~' нельзя. IIS за нас не проведет подмену части пути. Правильно использовать <asp:HyperLink, но если мы извращенцы и хотим все же сами формировать html?
Как прaвило в интернете сайт находится по пути: http://<domain>/page, в дебаге в локальном ИИС-е либо в ASP.NET development site: http://localhost:<random-port>/virtual-dir/page
Я использую примерно такой код:
private static string GetVirtualDirPrefix()
{
if (HttpContext.Current.Server.MachineName.ToLower() == "tukan-7")
return "/SITE/";
else
return "/";
}
<a href=<%=ServerFormedURL%> title="Супер" ...
В этом случае в ServerFormedURL вставлять '~' нельзя. IIS за нас не проведет подмену части пути. Правильно использовать <asp:HyperLink, но если мы извращенцы и хотим все же сами формировать html?
Как прaвило в интернете сайт находится по пути: http://<domain>/page, в дебаге в локальном ИИС-е либо в ASP.NET development site: http://localhost:<random-port>/virtual-dir/page
где virtual-dir - папка с сайтом.
Таким образом ServerFormedURL должен для локального дебага быть /virtual-dir/page, а для опубликованного релиза на продакшн сервере /page.
Конечно можно в коде написать что-то типа: if(isDebug) return /virtual-dir/page; else return /page; и дебажится на продакшн сервере мы не будем. Но что если на локальном ИИСе потребуется запустить релиз сборку? Правильно ссылки сломаются :(
private static string GetVirtualDirPrefix()
{
if (HttpContext.Current.Server.MachineName.ToLower() == "tukan-7")
return "/SITE/";
else
return "/";
}
Немає коментарів:
Дописати коментар