How can I get the baseurl of site?

后端 未结 12 1564
借酒劲吻你
借酒劲吻你 2020-11-30 17:43

I want to write a little helper method which returns the base URL of the site. This is what I came up with:

public static string GetSiteUrl()
{
    string ur         


        
相关标签:
12条回答
  • 2020-11-30 17:45

    This is a much more fool proof method.

    VirtualPathUtility.ToAbsolute("~/");
    
    0 讨论(0)
  • 2020-11-30 17:45

    This works for me.

    Request.Url.OriginalString.Replace(Request.Url.PathAndQuery, "") + Request.ApplicationPath;
    
    • Request.Url.OriginalString: return the complete path same as browser showing.
    • Request.Url.PathAndQuery: return the (complete path) - (domain name + PORT).
    • Request.ApplicationPath: return "/" on hosted server and "application name" on local IIS deploy.

    So if you want to access your domain name do consider to include the application name in case of:

    1. IIS deployment
    2. If your application deployed on the sub-domain.

    ====================================

    For the dev.x.us/web

    it return this strong text

    0 讨论(0)
  • 2020-11-30 17:45

    Please use the below code                           

    string.Format("{0}://{1}", Request.url.Scheme, Request.url.Host);
    
    0 讨论(0)
  • 2020-11-30 17:50

    you could possibly add in the port for non port 80/SSL?

    something like:

    if (HttpContext.Current.Request.ServerVariables["SERVER_PORT"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "80" && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "443")
                {
                    port = String.Concat(":", HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString());
                }
    

    and use that in the final result?

    0 讨论(0)
  • 2020-11-30 17:53

    I believe that the answers above doesn't consider when the site is not in the root of the website.

    This is a for WebApi controller:

    string baseUrl = (Url.Request.RequestUri.GetComponents(
                        UriComponents.SchemeAndServer, UriFormat.Unescaped).TrimEnd('/') 
                     + HttpContext.Current.Request.ApplicationPath).TrimEnd('/') ;
    
    0 讨论(0)
  • 2020-11-30 17:53

    To me, @warlock's looks like the best answer here so far, but I've always used this in the past;

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

    Or in a WebAPI controller;

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

    which is handy so you can choose what escaping format you want. I'm not clear why there are two such different implementations, and as far as I can tell, this method and @warlock's return the exact same result in this case, but it looks like GetLeftPart() would also work for non server Uri's like mailto tags for instance.

    0 讨论(0)
提交回复
热议问题