Como posso obter o URI do domínio raiz no ASP.NET?


Respostas:


79

HttpContext.Current.Request.Url pode obter todas as informações sobre o URL. E pode quebrar o url em seus fragmentos.


4
Sim, por que o voto negativo? Não vejo algo marcado como a resposta e votado negativamente com frequência. : /
Zack

4
Eu também não gosto dessa resposta. blesh deu a resposta certa e esta deveria ter sido marcada como a resposta ...
Michal B.

-1 - Request.Url geralmente fornece um url como "/ folder1 / folder2" e exclui o domínio por completo.
Justin

4
@ Justin: Request.Url dá a você um objeto Uri que tem todas as peças quebradas para você. Não deveria estar lhe dando uma corda. Pelo menos não na versão .net que estou usando
JoshBerke,

6
Esta resposta pode ser melhorada adicionando o código que a faz funcionar como a resposta abaixo que tem mais votos ...
theJerm

171
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);

Método Uri :: GetLeftPart :

O método GetLeftPart retorna uma string contendo a parte mais à esquerda da string URI, terminando com a parte especificada por part.

Enumeração UriPartial :

O esquema e os segmentos de autoridade do URI.


5
Muito melhor do que analisar o URL!
Evgenyt

1
esta é a melhor resposta! tnx!
AminM

Esta deve ser a resposta selecionada. Muita manipulação de string desnecessária.
Ghasan

1
Usando este método, http: // www.lala.xxx/blah/blah retornará http: // www.lala.xxx
live-love

+1 E não é o mesmo que .Authority que - nos testes que fiz no localhost - deixa de fora a parte do protocolo (http: //).
GGleGrand

122

Para quem ainda está se perguntando, uma resposta mais completa está disponível em 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;
    }
}

4
Funcionou perfeitamente. Se o site for servidor: 8080 / MySiteName , ele o obterá corretamente.
Michael La Voie

2
Obrigado por compartilhar o código real em vez de um link em outro lugar.
theJerm

2
context.Request.Url.Port == 80 causará problemas no HTTPS
Evgenyt

7
Atenção! Não funciona para https. Para https, é necessário substituir context.Request.Url.Port == 80 por (context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")ou usar a resposta abaixo
razon

1
Funciona também para localhost (se você estiver testando localmente). Se você não precisa de uma porta, pode usar "http: //" + HttpContext.Current.Request.Url.Host;
CyberHawk

32

Se o URL de exemplo for 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"

1
Não, não. .Hostde "http://www.foobar.com/Page1"é www.foobar.com, não foobar.com.
tchelidze

1
sim você está certo, atualizou a resposta. @tchelidze thanks
Dheeraj Palagiri

27
string hostUrl = Request.Url.Scheme + "://" + Request.Url.Host; //should be "http://hostnamehere.com"

16

Para obter toda a string do URL de solicitação:

HttpContext.Current.Request.Url

Para obter a parte www.foo.com da solicitação:

HttpContext.Current.Request.Url.Host

Observe que você está, até certo ponto, à mercê de fatores externos ao seu aplicativo ASP.NET. Se o IIS estiver configurado para aceitar vários ou qualquer cabeçalho de host para o seu aplicativo, qualquer um desses domínios resolvidos para o seu aplicativo via DNS pode aparecer como o URL da solicitação, dependendo de qual o usuário inseriu.


1
solução mais simples aqui
full_prog_full

4
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;

host.com => retornar host.com
s.host.com => retornar host.com

host.co.uk => return host.co.uk
www.host.co.uk => return host.co.uk
s1.www.host.co.uk => return host.co.uk


Sei que este é um post antigo, mas muito bem NQuenault, não sou muito bom em Expressões Regex tão bem feito. Exatamente o que eu precisava.
JeffreyJ

@nquenault alguma ideia sobre a melhor forma de lidar com um nome de host como www.abc.com? Obrigado!
Gary Ewan Park

4

--Adicionar a porta pode ajudar ao executar o IIS Express

Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port

3
string domainName = Request.Url.Host

3

Eu sei que isso é mais antigo, mas a maneira correta de fazer isso agora é

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

Isso obterá o DNS ou endereço IP com porta para um servidor.



1

Exemplo C # abaixo:

string scheme = "http://";
string rootUrl = default(string);
if (Request.ServerVariables["HTTPS"].ToString().ToLower() == "on")
{
  scheme = "https://";
}
rootUrl = scheme + Request.ServerVariables["SERVER_NAME"].ToString();

1
string host = Request.Url.Host;
Regex domainReg = new Regex("([^.]+\\.[^.]+)$");
HttpCookie cookie = new HttpCookie(cookieName, "true");
if (domainReg.IsMatch(host))
{
  cookieDomain = domainReg.Match(host).Groups[1].Value;                                
}

1

Isso retornará especificamente o que você está pedindo.

Dim mySiteUrl = Request.Url.Host.ToString()

Eu sei que esta é uma questão mais antiga. Mas eu precisava da mesma resposta simples e isso retorna exatamente o que é perguntado (sem o http: //).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.