Определите абсолютный, полный URL-адрес сайта в asp.net.
Вопрос
Как я могу последовательно получить абсолютный, полный корневой или базовый URL-адрес сайта независимо от того, находится ли сайт в виртуальном каталоге и где находится мой код в структуре каталогов?Я перепробовал все переменные и функции, которые только мог придумать, но не нашел хорошего способа.
Я хочу иметь возможность получить URL-адрес текущего сайта, т.е. http://www.example.com или если это виртуальный каталог, http://www.example.com/DNN/
Вот некоторые вещи, которые я пробовал, и результат.Единственный, который включает в себя весь кусок, который я хочу (http://локальный хост: 4471/DNN441) — это Request.URI.AbsoluteURI:
- Запрос.ФизическийПуть:C:\WebSites\DNN441\Default.aspx
- Запрос.Путь к приложению:/DNN441
- Request.PhysicalApplicationPath:C:\WebSites\DNN441\
- МапПат:C:\WebSites\DNN441\DesktopModules\Articles emplates\Default.aspx
- Необработанный URL-адрес:/DNN441/ModuleTesting/Articles/tabid/56/ctl/Details/mid/374/ItemID/1/Default.aspx
- Request.Url.AbsoluteUri: http://localhost:4471/DNN441/Default.aspx
- Request.Url.AbsolutePath:/DNN441/Default.aspx
- Запрос.Url.LocalPath:/DNN441/Default.aspx Request.Url.Host:локальный хост
- Запрос.Url.PathAndQuery:/DNN441/Default.aspx?TabId=56&ctl=Details&mid=374&ItemID=1
Решение
Прочитав ответ, представленный в блоге Рика Страла, я обнаружил, что то, что мне действительно нужно, было довольно простым.Сначала вам нужно определить относительный путь (что для меня было самой простой частью) и передать его в функцию, определенную ниже:
ВБ.НЕТ
Public Shared Function GetFullyQualifiedURL(ByVal s as string) As String
Dim Result as URI = New URI(HttpContext.Current.Request.Url, s)
Return Result.ToString
End Function
С#
public static string GetFullyQualifiedURL(string s) {
Uri Result = new Uri(HttpContext.Current.Request.Url, s);
return Result.ToString();
}
Другие советы
Принятый ответ предполагает, что текущий запрос уже находится на сервере/виртуальном корне.Попробуй это:
Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
Есть отличные обсуждения и идеи по Блог Рика Страла
РЕДАКТИРОВАТЬ:Я должен добавить, что эти идеи работают как с действительным HttpContext, так и без него.
РЕДАКТИРОВАТЬ2:Вот конкретный комментарий/код в том посте, который отвечает на вопрос
Найденный этот код здесь:
string appPath = null;
appPath = string.Format("{0}://{1}{2}{3}",
Request.Url.Scheme,
Request.Url.Host,
Request.Url.Port == 80 ? string.Empty : ":" + Request.Url.Port,
Request.ApplicationPath);
Пробовали ли вы AppSettings.RootUrl, который обычно настраивается в файле web.config?
Вы говорите об использовании в качестве ссылок?
если да, то делаю это <a href='/'>goes to root</a>
приведет вас к файлу по умолчанию в корневом веб-сайте.
Теперь, на стороне клиента, передача «~/» методу Control::ResolveUrl предоставит вам то, что вы ищете.(http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx)
На данный момент у меня нет возможности проверить это, но пробовали ли вы «Request.Url.AbsoluteUri» с другого компьютера?
Мне пришло в голову, что что касается вашей машины, то ее браузер запрашивает данные с локального хоста.
Хотя я могу ошибаться, но я думаю, что запрос относится к браузеру, а не к веб-серверу.