Каков самый быстрый способ получить абсолютный URI для корневого каталога приложения в asp.net?

Как проще всего получить: http://www.[Domain].com в asp.net?

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

В CMS есть то, что я искал, что-то лаконичное и запоминающееся, Стивен Байер получает голос за лакомство.

rjarmstrong 23.10.2008 01:44
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
1
3 574
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

System.Web.UI.Page.Request.Url

Это даст полный URL-адрес страницы

Mitchel Sellers 21.10.2008 22:02

Попробуйте это: Request.ServerVariables ["SERVER_PORT_SECURE"] + Request.ServerVariables ["SERVER_NAME"] + Request.ServerVariables ["SERVER_PORT"] + Request.ApplicationPath;

SaaS Developer 21.10.2008 22:08
this.Request.Url.Host

Вы можете использовать что-то вроде этого.

System.Web.HttpContext.Current.Server.ResolveUrl("~/")

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

Редактировать

Старая публикация содержала неправильный вызов метода!

это дает имя физического пути, а не совсем то, что он искал. хорошо, ну ... совсем нет.

stephenbayer 21.10.2008 22:38
Ответ принят как подходящий

Сделать это можно так:

string.Format("{0}://{1}:{2}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port)

И вы получите общий синтаксис URI <protocol>: // <host>: <port>

Мне это нравится, но что делать, если вам не нужен порт, если порт 80 .. ?? - String.Format ((Request.Url.Port! = 80)? "{0}: // {1}: {2}": "{0}: // {1}", Request.Url.Scheme , Request.Url.Host, Request.Url.Port) .... или это сломается, потому что в некоторых случаях нет {2}

stephenbayer 21.10.2008 22:41

Это не сработает, если ваше приложение развернуто в виртуальном каталоге.

Frank Schwieterman 16.07.2009 01:12

Мне действительно нравится, как CMS лучше всего справилась с этим вопросом, используя переменные String.Format и Page.Request. Я просто хотел бы немного подправить его. Я только что протестировал его на одной из своих страниц, поэтому скопирую код сюда:

String baseURL = string.Format(
   (Request.Url.Port != 80) ? "{0}://{1}:{2}" : "{0}://{1}", 
    Request.Url.Scheme, 
    Request.Url.Host, 
    Request.Url.Port)

Этот метод обрабатывает http / https, номера портов и строки запроса.

'Returns current page URL 
Function fullurl() As String
    Dim strProtocol, strHost, strPort, strurl, strQueryString As String
    strProtocol = Request.ServerVariables("HTTPS")
    strPort = Request.ServerVariables("SERVER_PORT")
    strHost = Request.ServerVariables("SERVER_NAME")
    strurl = Request.ServerVariables("url")
    strQueryString = Request.ServerVariables("QUERY_STRING")

    If strProtocol = "off" Then
        strProtocol = "http://"
    Else
        strProtocol = "https://"
    End If

    If strPort <> "80" Then
        strPort = ":" & strPort
    Else
        strPort = ""
    End If

    If strQueryString.Length > 0 Then
        strQueryString = "?" & strQueryString
    End If

    Return strProtocol & strHost & strPort & strurl & strQueryString
End Function

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

Принятое решение не работало для меня из-за локального хоста и виртуальных каталогов.

Итак, я придумал следующее решение, оно работает на локальном хосте с виртуальными каталогами или без них и, конечно же, на веб-сайтах IIS.

string.Format("{0}://{1}:{2}{3}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, ResolveUrl("~")

Объединив лучшее из того, что я видел по этому вопросу, этот заботится о:

  1. http и https
  2. стандартные порты (80, 443) и нестандартные
  3. приложение, размещенное в подпапке корня

    string url = String.Format(
        Request.Url.IsDefaultPort ? "{0}://{1}{3}" : "{0}://{1}:{2}{3}",
        Request.Url.Scheme, Request.Url.Host,
        Request.Url.Port, ResolveUrl("~/"));
    

Мы можем использовать Uri и его конструктор baseUri:

  • new Uri(this.Request.Url, "/") для корня сайта
  • new Uri(this.Request.Url, this.Request.ResolveUrl("~/")) для корня сайта

Я использую это свойство на странице для обработки виртуальных каталогов и портов по умолчанию:

string FullApplicationPath {
    get {
        StringBuilder sb = new StringBuilder();
        sb.AppendFormat("{0}://{1}", Request.Url.Scheme, Request.Url.Host);

        if (!Request.Url.IsDefaultPort)
            sb.AppendFormat(":{0}", Request.Url.Port);

        if (!string.Equals("/", Request.ApplicationPath))
            sb.Append(Request.ApplicationPath);

        return sb.ToString();
    }
}

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