пʼятниця, 3 серпня 2012 р.

ASP.NET веб сайт: дебаг, релиз и пути ссылок

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
где 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 "/";
    }

Немає коментарів: