Pergunta

Como posso obter consistentemente o absoluto raiz ou base url, totalmente qualificado do site, independentemente do site é em um diretório virtual e, independentemente de onde o meu código é na estrutura de diretórios? Tentei todas as variáveis ??e das funções que eu posso pensar e não ter encontrado um bom caminho.

Eu quero ser capaz de obter a URL do site atual, ou seja, http://www.example.com ou se é um diretório virtual, http://www.example.com/DNN/


Aqui estão algumas das coisas que eu tentei e o resultado. O único que inclui toda a peça que eu quero ( http: // localhost: 4471 / DNN441 ) é Pedido .URI.AbsoluteURI:

  • Request.PhysicalPath: C: \ WebSites \ DNN441 \ Default.aspx
  • Request.ApplicationPath: / DNN441
  • Request.PhysicalApplicationPath: C: \ WebSites \ DNN441 \
  • MapPath: C: \ WebSites \ DNN441 \ DesktopModules \ Artigos \ 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
Foi útil?

Solução

Ao ler a resposta dada no blog de Rick Strahl eu encontrei o que eu realmente precisava era bastante simples. Primeiro você precisa para determinar o caminho relativo (que para mim foi a parte mais fácil), e passar isso para a função definida abaixo:

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

Outras dicas

A resposta aceita assume que o pedido atual já está no servidor / root virtual. Tente isto:

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

Há alguma discussão excelente e ideias sobre de Rick Strahl do blog

EDIT:. Devo acrescentar que as idéias de trabalho com ou sem um válido HttpContext

EDIT2: Aqui está a comentário específico / code on esse post que responde à pergunta

Encontrado este código aqui :

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

Você já tentou AppSettings.RootUrl que normalmente é configurado no arquivo web.config?

Você está falando para uso como links?

Se sim, então fazer isso <a href='/'>goes to root</a> irá levá-lo para o arquivo padrão da raiz web.

Agora, para o lado do cliente, fazendo, passando "~ /" para o método de controle :: ResolveUrl irá fornecer-lhe o que você está procurando. ( http://msdn.microsoft.com /en-us/library/system.web.ui.control.resolveurl.aspx )

Eu não tenho nenhuma maneira de validar esta no momento, mas você já tentou "Request.Url.AbsoluteUri" de outra máquina?

Ocorre-me que, tanto quanto a sua máquina está em causa do navegador está solicitando a partir de localhost.

Eu posso estar errado embora, mas eu acho pedido é relativo ao navegador e não o servidor Web.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top