Как я могу получить URI корневого домена в ASP.NET? - PullRequest
89 голосов
/ 01 августа 2009

Допустим, у меня есть веб-сайт на http://www.foobar.com.

Есть ли способ, которым я могу программно определить "http://www.foobar.com/" в моем коде позади (т.е. без необходимости жестко кодировать его в моей веб-конфигурации)?

Ответы [ 14 ]

158 голосов
/ 20 ноября 2009
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);

Uri :: GetLeftPart Method :

Метод GetLeftPart возвращает строку, содержащую крайнюю левую часть строки URI, заканчивающуюся частью, указанной частью.

Перечисление UriPartial :

Схема и сегменты полномочий URI.

121 голосов
/ 04 ноября 2009

Для тех, кто все еще задается вопросом, более полный ответ доступен на http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/.

public string FullyQualifiedApplicationPath
{
    get
    {
        //Return variable declaration
        var appPath = string.Empty;

        //Getting the current context of HTTP request
        var context = HttpContext.Current;

        //Checking the current context content
        if (context != null)
        {
            //Formatting the fully qualified website url/name
            appPath = string.Format("{0}://{1}{2}{3}",
                                    context.Request.Url.Scheme,
                                    context.Request.Url.Host,
                                    context.Request.Url.Port == 80
                                        ? string.Empty
                                        : ":" + context.Request.Url.Port,
                                    context.Request.ApplicationPath);
        }

        if (!appPath.EndsWith("/"))
            appPath += "/";

        return appPath;
    }
}
80 голосов
/ 01 августа 2009

HttpContext.Current.Request.Url может получить всю информацию по URL. И может разбить URL на его фрагменты.

27 голосов
/ 11 февраля 2015

Если пример URL-адреса http://www.foobar.com/Page1

HttpContext.Current.Request.Url; //returns "http://www.foobar.com/Page1"


HttpContext.Current.Request.Url.Host; //returns "www.foobar.com"


HttpContext.Current.Request.Url.Scheme; //returns "http/https"


HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); //returns "http://www.foobar.com"
27 голосов
/ 01 августа 2009
string hostUrl = Request.Url.Scheme + "://" + Request.Url.Host; //should be "http://hostnamehere.com"
16 голосов
/ 01 августа 2009

Чтобы получить всю строку URL запроса:

HttpContext.Current.Request.Url

Чтобы получить часть запроса www.foo.com:

HttpContext.Current.Request.Url.Host

Обратите внимание, что вы в некоторой степени зависите от факторов вне вашего приложения ASP.NET. Если IIS настроен на прием нескольких или любого заголовка узла для вашего приложения, то любой из этих доменов, разрешенных для вашего приложения через DNS, может отображаться как URL-адрес запроса, в зависимости от того, какой из них введен пользователем.

4 голосов
/ 30 августа 2015

- Добавление порта может помочь при запуске IIS Express

Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port
3 голосов
/ 20 января 2015

Это работает также:

string url = HttpContext.Request.Url.Authority;

3 голосов
/ 13 июня 2013
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;

host.com => вернуть host.com
s.host.com => вернуть host.com

host.co.uk => вернуть host.co.uk
www.host.co.uk => вернуть host.co.uk
s1.www.host.co.uk => вернуть host.co.uk

3 голосов
/ 12 марта 2013

Я знаю, что это старше, но правильный способ сделать это сейчас -

string Domain = HttpContext.Current.Request.Url.Authority

Это даст DNS или IP-адрес с портом для сервера.

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