Определите абсолютный, полный URL-адрес сайта в asp.net.

StackOverflow https://stackoverflow.com/questions/121962

  •  02-07-2019
  •  | 
  •  

Вопрос

Как я могу последовательно получить абсолютный, полный корневой или базовый 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» с другого компьютера?

Мне пришло в голову, что что касается вашей машины, то ее браузер запрашивает данные с локального хоста.

Хотя я могу ошибаться, но я думаю, что запрос относится к браузеру, а не к веб-серверу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top