Search code examples
c#asp.netcode-behindhttpcontext

Request.Url.Host and ApplicationPath in one call


Is there any way to get HttpContext.Current.Request.Url.Host and HttpContext.Current.Request.ApplicationPath in one call?

Something like "full application url"?

EDIT: Clarification - what I need is this the part within []:

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

I ask simply out of curiosity.

EDIT 2: Thanks for all the replies, but none of them were exactly what I was looking for. FYI, I solved the problem this way (but am still interested in knowing if there's a smoother way):

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

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