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

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

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


Вот некоторые из вещей, которые я пробовал, и результат. Единственный, который включает в себя весь нужный мне фрагмент (http: // локальный: 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 \ Articles \ Templates \ Default.aspx
  • RawURL: /DNN441/ModuleTesting/Articles/tabid/56/ctl/Details/mid/374/ItemID/1/Default.aspx
  • Request.Url.AbsoluteUri: http: // локальный: 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
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
7 793
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Есть отличное обсуждение и идеи по Блог Рика Страла

Обновлено: я должен добавить, что идеи работают с действующим HttpContext или без него.

EDIT2: вот конкретный комментарий / код в этом посте, который отвечает на вопрос

Последний пост на странице действительно кажется мне нужным ответом. Я не «принял» этот ответ, потому что я ненавижу, когда людям приходится читать все там, чтобы добраться до окончательного ответа ... Не уверен, стоит ли мне просто репостить последний пост здесь или какое лучшее решение .

EfficionDave 24.09.2008 22:46

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

Это будет для модуля DotNetNuke, и большинство сайтов DotNetNuke не имеют этого параметра.

EfficionDave 23.09.2008 20:42

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

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

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

Нет, это будут относительные ссылки. Мне нужен абсолютный, полностью квалифицированный корень. У меня есть множество случаев, когда мне это нужно, конкретный прямо сейчас - я могу передать URL-адреса возврата и отмены в Paypal.

EfficionDave 23.09.2008 20:44

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

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

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

Ответ принят как подходящий

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

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();
}

Я думаю, это работает, только если ваш текущий запрос уже находится в корне. В противном случае он относится к каталогу текущих запросов, а не к корневому каталогу серверного приложения. Я добился успеха с: Request.Url.GetLeftPart (UriPartial.Authority) + Request.ApplicationPath

Scott Stafford 18.08.2011 22:45

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

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);

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

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath

Иногда я считаю, что это предпочтительный вариант. Еще недостаточно, чтобы изменить его на принятый ответ, но, возможно, со временем.

EfficionDave 19.02.2012 03:22

Другие вопросы по теме