Question

Est-il possible d'obtenir HttpContext.Current.Request.Url.Host et HttpContext.Current.Request.ApplicationPath dans un appel?

Quelque chose comme "url pleine application"?

EDIT: clarification - ce que je dois c'est la partie dans les []:

http://[www.mysite.com/mywebapp]/Pages/Default.aspx

Je demande simplement par curiosité.

EDIT 2: Merci pour toutes les réponses, mais aucun d'entre eux étaient exactement ce que je cherchais. Pour votre information, j'ai résolu le problème de cette façon (mais je suis toujours intéressé à savoir s'il y a un moyen plus lisse):

public string GetWebAppRoot()
{
    if(HttpContext.Current.Request.ApplicationPath == "/")
        return "http://" + HttpContext.Current.Request.Url.Host;
    else
        return "http://" + HttpContext.Current.Request.Url.Host + HttpContext.Current.Request.ApplicationPath;
}
Était-ce utile?

La solution

public static string GetSiteRoot()
{
  string port = System.Web.HttpContext.Current.Request.ServerVariables["SERVER_PORT"];
  if (port == null || port == "80" || port == "443")
    port = "";
  else
    port = ":" + port;

  string protocol = System.Web.HttpContext.Current.Request.ServerVariables["SERVER_PORT_SECURE"];
  if (protocol == null || protocol == "0")
    protocol = "http://";
  else
    protocol = "https://";

  string sOut = protocol + System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"] + port + System.Web.HttpContext.Current.Request.ApplicationPath;

  if (sOut.EndsWith("/"))
  {
    sOut = sOut.Substring(0, sOut.Length - 1);
  }

  return sOut;
}

Autres conseils

Ce ne fonctionnait pas sur mon localhost avec un numéro de port si fait des modifications mineures:

  private string GetWebAppRoot()
    {
        string host = (HttpContext.Current.Request.Url.IsDefaultPort) ? 
            HttpContext.Current.Request.Url.Host : 
            HttpContext.Current.Request.Url.Authority;
        host = String.Format("{0}://{1}", HttpContext.Current.Request.Url.Scheme, host);            
        if (HttpContext.Current.Request.ApplicationPath == "/")
            return host;
        else
            return host + HttpContext.Current.Request.ApplicationPath;
    }

Ce que vous devez vraiment faire est:

return String.Format("{0}://{1}/", Request.Url.Scheme, Request.Url.Host);

De cette façon, cela fonctionne si vous utilisez HTTPS (ou un autre schéma!)

Merci pour toutes les réponses, mais aucun d'entre eux étaient exactement ce que je cherchais. Pour votre information, j'ai résolu le problème de cette façon (mais je suis toujours intéressé à savoir s'il y a un moyen plus lisse):

public string GetWebAppRoot()
{
    if(HttpContext.Current.Request.ApplicationPath == "/")
        return "http://" + HttpContext.Current.Request.Url.Host;
    else
        return "http://" + HttpContext.Current.Request.Url.Host + HttpContext.Current.Request.ApplicationPath;
}

Vérifier ce message :

public static Uri GetBaseUrl(HttpRequest request)
{
    Uri contextUri = new Uri(request.Url, request.RawUrl);
    UriBuilder realmUri = new UriBuilder(contextUri) { Path = request.ApplicationPath, Query = null, Fragment = null };
    return realmUri.Uri;
}

public static string GetAbsoluteUrl(HttpRequest request, string relativeUrl)
{
    return new Uri(GetBaseUrl(request), VirtualPathUtility.ToAbsolute(relativeUrl)).AbsoluteUri;
}

Si vous ne recevez pas ce que vous avez besoin de GetBaseUrl direcly, est devrait être possible de le faire:

GetAbsoluteUrl(HttpContext.Current.Request, "/")

HttpContext.Current.Request.Url.AbsoluteUri
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top