web-dev-qa-db-fra.com

Comment puis-je obtenir le baseurl du site?

Je veux écrire une petite méthode d'assistance qui renvoie l'URL de base du site. Voici ce que je suis venu avec:

public static string GetSiteUrl()
{
    string url = string.Empty;
    HttpRequest request = HttpContext.Current.Request;

    if (request.IsSecureConnection)
        url = "https://";
    else
        url = "http://";

    url += request["HTTP_Host"] + "/";

    return url;
}

Y a-t-il une erreur à laquelle vous pouvez penser? Quelqu'un peut-il améliorer cela?

173
Jaggu

Essaye ça:

string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + 
    Request.ApplicationPath.TrimEnd('/') + "/";
312
Frank Allenby
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority)

C'est ça ;)

165
Warlock

La solution populaire GetLeftPart n'est pas prise en charge dans la version PCL de Uri, malheureusement. GetComponents est cependant, donc si vous avez besoin de portabilité, cela devrait faire l'affaire:

uri.GetComponents(
    UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.Unescaped);
8
Todd Menier

Je crois que les réponses ci-dessus ne tiennent pas compte du fait que le site n'est pas à la racine du site.

C'est un contrôleur pour WebApi:

string baseUrl = (Url.Request.RequestUri.GetComponents(
                    UriComponents.SchemeAndServer, UriFormat.Unescaped).TrimEnd('/') 
                 + HttpContext.Current.Request.ApplicationPath).TrimEnd('/') ;
6
rufo

Pour moi, @ warlock semble être la meilleure réponse à ce jour, mais je l’ai toujours utilisé par le passé;

string baseUrl = Request.Url.GetComponents(
    UriComponents.SchemeAndServer, UriFormat.UriEscaped)   

Ou dans un contrôleur WebAPI;

string baseUrl = Url.Request.RequestUri.GetComponents(
    UriComponents.SchemeAndServer, UriFormat.Unescaped)

ce qui est pratique pour que vous puissiez choisir le format d'échappement que vous voulez. Je ne comprends pas pourquoi il y a deux implémentations si différentes, et autant que je sache, cette méthode et @ warlock renvoient exactement le même résultat dans ce cas, mais il semble que GetLeftPart() fonctionnerait également pour un serveur autre que serveur. Uri ressemble à mailto balises par exemple.

6
cirrus

Je vais avec

HttpContext.Current.Request.ServerVariables["HTTP_Host"]
5
Talha

C'est une méthode beaucoup plus infaillible.

VirtualPathUtility.ToAbsolute("~/");
4
Daniel A. White

D'après ce que Warlock a écrit, j'ai découvert que le chemin d'accès virtuel à la racine est nécessaire si vous n'êtes pas hébergé à la racine de votre site Web. (Cela fonctionne pour les contrôleurs API Web MVC)

String baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) 
+ Configuration.VirtualPathRoot;
4
SpazDude

J'utilise le code suivant de Application_Start

String baseUrl = Path.GetDirectoryName(HttpContext.Current.Request.Url.OriginalString);

1
Crispijn Lange

Cela fonctionne pour moi.

Request.Url.OriginalString.Replace(Request.Url.PathAndQuery, "") + Request.ApplicationPath;
  • Request.Url.OriginalString: renvoie le chemin complet identique à celui du navigateur.
  • Request.Url.PathAndQuery: retourne le (chemin complet) nom de domaine + PORT).
  • --- (Request.ApplicationPath: renvoyez "/" sur le serveur hébergé et "nom de l'application" sur le serveur local IIS deploy.

Donc, si vous souhaitez accéder à votre nom de domaine, envisagez d'inclure le nom de l'application dans les cas suivants:

  1. Déploiement IIS
  2. Si votre application déployée sur le sous-domaine.
1
FAHID
 string baseURL = HttpContext.Request.Url.Host;
0
shebin c babu

S'il vous plaît utiliser le code ci-dessous

string.Format("{0}://{1}", Request.url.Scheme, Request.url.Host);
0
Pranav Joseph