How to get full host name + port number in Application_Start of Global.aspx?

后端 未结 3 1654
梦谈多话
梦谈多话 2020-11-29 05:29

I tried

Uri uri = HttpContext.Current.Request.Url;
String host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + \":\" + uri.Port;

and it wo

相关标签:
3条回答
  • 2020-11-29 06:19

    Just answering this so if someone ever decides to actually search on this topic...

    This works on application start in any mode...

    typeof(HttpContext).GetField("_request", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(HttpContext.Current)
    
    0 讨论(0)
  • 2020-11-29 06:26

    When your web application starts, there is no HTTP request being handled.

    You may want to handle define the Application_BeginRequest(Object Sender, EventArgs e) method in which the the Request context is available.

    Edit: Here is a code sample inspired by the Mike Volodarsky's blog that Michael Shimmins linked to:

        void Application_BeginRequest(Object source, EventArgs e)
        {
            HttpApplication app = (HttpApplication)source;
            var host = FirstRequestInitialisation.Initialise(app.Context);
        }
    
        static class FirstRequestInitialisation
        {
            private static string host = null;
            private static Object s_lock = new Object();
    
            // Initialise only on the first request
            public static string Initialise(HttpContext context)
            {
                if (string.IsNullOrEmpty(host))
                {
                    lock (s_lock)
                    {
                        if (string.IsNullOrEmpty(host))
                        {
                            var uri = context.Request.Url;
                            host = uri.GetLeftPart(UriPartial.Authority);
                        }
                    }
                }
    
                return host;
            }
        }
    
    0 讨论(0)
  • 2020-11-29 06:27

    The accepted answer is good, but in most cases (if the first request is a HTTP Request) you should better use the Session_Start event, which is called once per user every 20 minutes or so (not sure how long the session is valid). Application_BeginRequest will be fired at every Request.

    public void Session_Start(Object source, EventArgs e)
    {
       //Request / Request.Url is available here :)
    }
    
    0 讨论(0)
提交回复
热议问题