2008-10-21 2 views
5

Quel est le moyen le plus simple d'obtenir: http://www.[Domain].com dans asp.net?Quel est le moyen le plus rapide d'obtenir l'uri absolu pour la racine de l'application dans asp.net?

Il ne semble pas y avoir une méthode qui puisse le faire, la seule façon que je connaisse est de faire des acrobaties de chaînes sur des variables de serveur ou Request.Url. N'importe qui?

+0

CMS a ce que je cherchais, quelque chose de succi nt et mémorable, Stephen Bayer obtient un vote pour le polonais. – rjarmstrong

Répondre

2

Vous pouvez le faire comme ceci:

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

Et vous obtiendrez le protocole generic URI syntax < >: // < hôte >: <Port>

+0

J'aime ça, mais que faire si vous ne voulez pas le port, si le port est 80 .. ?? - String.Format ((Request.Url.Port! = 80)? "{0}: // {1}: {2}": "{0}: // {1}", Request.Url. Scheme, Request.Url.Host, Request.Url.Port) .... ou cela va-t-il se casser parce qu'il n'y a pas {2} dans certains cas – stephenbayer

+0

Cela fonctionne, juste testé ... – stephenbayer

+0

Cela ne fonctionnera pas si votre L'application est déployée dans un répertoire virtuel. –

1
System.Web.UI.Page.Request.Url 
+0

Cela donnera l'URL complète de la page –

+0

Essayez ceci: Request.ServerVariables ["SERVER_PORT_SECURE"] + Request.ServerVariables ["SERVER_NAME"] + Request.ServerVariables ["SERVER_PORT"] + Request.ApplicationPath; –

1
this.Request.Url.Host 
2

Vous pouvez utiliser quelque chose comme ça.

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

Il correspond à la racine de l'application. Maintenant, si vous êtes dans un répertoire virtuel, vous devrez faire un peu plus de travail.

Modifier

affichage Ancien contenu appel de méthode incorrecte!

+0

qui donne le nom du chemin physique, pas exactement ce qu'il cherchait. D'accord, eh bien ... pas du tout. – stephenbayer

+0

Oups .... mauvais extrait fixe maintenant –

+0

cool .. mieux .. :) – stephenbayer

2

Je aime vraiment la façon dont la CMS a traité ce questionnez le meilleur, en utilisant les variables String.Format et Page.Request. Je voudrais juste le modifier légèrement. Je viens de tester sur une de mes pages, donc, je vais copier le code ici:

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

Cette méthode gère http/https, les numéros de port et les chaînes de requête.

'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 
0

je dû faire face à quelque chose de similaire, il me fallait un moyen de mettre programatically la balise pour pointer vers ma racine de site Web.

La solution acceptée ne fonctionnait pas pour moi à cause de localhost et de répertoires virtuels.

J'ai donc trouvé la solution suivante, cela fonctionne sur localhost avec ou sans répertoires virtuels et bien sûr sur les sites Web IIS.

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

En combinant le meilleur de ce que je l'ai vu sur cette question jusqu'à présent, celui-ci prend en charge:

  1. http et https
  2. ports standard (80, 443) et non standards
  3. demande

    hébergé dans un sous-dossier de la racine

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

Nous pouvons utiliser Uri et son constructeur baseURI:

  • new Uri(this.Request.Url, "/") pour la racine du site
  • new Uri(this.Request.Url, this.Request.ResolveUrl("~/")) pour la racine du site
1

J'utilise cette propriété sur la page pour traiter les cas répertoires virtuels et les ports par défaut:

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