Определите абсолютный, полный URL-адрес сайта в asp.net - PullRequest
7 голосов
/ 23 сентября 2008

Как я могу последовательно получить абсолютный, полностью определенный корневой или базовый URL-адрес сайта независимо от того, находится ли сайт в виртуальном каталоге и независимо от того, где мой код находится в структуре каталога? Я перепробовал все переменные и функции, о которых только мог подумать, и не нашел хорошего способа.

Я хочу получить URL текущего сайта, т.е. http://www.example.com или, если это виртуальный каталог, http://www.example.com/DNN/


Вот некоторые из вещей, которые я пробовал, и результат. Единственный, который включает в себя весь кусок, который я хочу (http://localhost:4471/DNN441), это Request.URI.AbsoluteURI:

  • Request.PhysicalPath: C: \ WebSites \ DNN441 \ Default.aspx
  • Request.ApplicationPath: / DNN441
  • Request.PhysicalApplicationPath: C: \ WebSites \ DNN441 \
  • MapPath: C: \ WebSites \ DNN441 \ DesktopModules \ Статьи \ Templates \ Default.aspx
  • RawURL: /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
  • Request.Url.LocalPath: /DNN441/Default.aspx Request.Url.Host: localhost
  • Request.Url.PathAndQuery: /DNN441/Default.aspx?TabId=56&ctl=Details&mid=374&ItemID=1

Ответы [ 7 ]

12 голосов
/ 24 октября 2008

Прочитав ответ, приведенный в блоге Рика Строля, я обнаружил, что мне действительно нужно было довольно просто. Сначала вам нужно определить относительный путь (который для меня был простой частью) и передать его в функцию, определенную ниже:

VB.NET

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

C #

public static string GetFullyQualifiedURL(string s) {
    Uri Result = new Uri(HttpContext.Current.Request.Url, s);
    return Result.ToString();
}
7 голосов
/ 18 августа 2011

Принятый ответ предполагает, что текущий запрос уже находится на сервере / в виртуальном корне. Попробуйте это:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
5 голосов
/ 23 сентября 2008

В блоге Рика Строля есть отличные обсуждения и идеи

РЕДАКТИРОВАТЬ: я должен добавить, что идеи работают с или без действительного HttpContext.

РЕДАКТИРОВАТЬ2: Вот специальный комментарий / код в этом посте, который отвечает на вопрос

2 голосов
/ 19 октября 2009

Найден этот код здесь :

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);
0 голосов
/ 23 сентября 2008

У меня нет способа проверить это в данный момент, но вы пробовали "Request.Url.AbsoluteUri" с другого компьютера?

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

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

0 голосов
/ 23 сентября 2008

Вы говорите об использовании в качестве ссылок?

Если это так, то при выполнении этого <a href='/'>goes to root</a> вы перейдете к файлу по умолчанию для веб-корня.

Теперь, на стороне клиента, передача "~ /" методу Control :: ResolveUrl предоставит вам то, что вы ищете. (http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx)

0 голосов
/ 23 сентября 2008

Вы пробовали AppSettings.RootUrl, который обычно настраивается в файле web.config?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...