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?
Essaye ça:
string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority +
Request.ApplicationPath.TrimEnd('/') + "/";
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority)
C'est ça ;)
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);
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('/') ;
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.
Je vais avec
HttpContext.Current.Request.ServerVariables["HTTP_Host"]
C'est une méthode beaucoup plus infaillible.
VirtualPathUtility.ToAbsolute("~/");
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;
J'utilise le code suivant de Application_Start
String baseUrl = Path.GetDirectoryName(HttpContext.Current.Request.Url.OriginalString);
Cela fonctionne pour moi.
Request.Url.OriginalString.Replace(Request.Url.PathAndQuery, "") + Request.ApplicationPath;
Donc, si vous souhaitez accéder à votre nom de domaine, envisagez d'inclure le nom de l'application dans les cas suivants:
string baseURL = HttpContext.Request.Url.Host;
S'il vous plaît utiliser le code ci-dessous
string.Format("{0}://{1}", Request.url.Scheme, Request.url.Host);