곡선 구국: IIS7 통합 모드에서 사이트의 URL을 가져오는 방법

5648 단어 IIS
저희가 글로벌에 있는 Application이면...Start 이벤트에서 HttpContext에 액세스합니다.Current.Request 객체:
        protected void Application_Start()
        {
            var url=HttpContext.Current.Request.Url.ToString();
        }

단지 현재 사이트의 URL을 간단하게 찾으려고 합니다.디버깅을 할 때는 모든 것이 정상적이지만, 우리가 사이트를 IIS에 발표할 때, IIS가 통합 모드에 있어야 한다면, '이 상하문에서 사용할 수 없는 요청' 의 이상을 보고하지만, 클래식 모드라면 사용할 수 없습니다.이 글은 상세한 설명이 있다http://www.cnblogs.com/dudu/archive/2011/10/14/Application_Start_Context_Request.html
일반적으로 이 문제를 해결하는 데는 두 가지 방법이 있다.
1. IIS 어플리케이션 풀을 클래식 모드로 변경
2. ApplicationStart에서 HttpContext에 액세스합니다.Current.Request 객체
그러나 일부 특수한 상황에서 통합 모드에서 ApplicationStart는 현재 사이트의 URL을 가져옵니다.
HttpContext를 호출할 수는 없지만.Current.Request 객체는 System을 통해 제공됩니다.Web.Hosting.HostingEnvironment.ApplicationID는 IIS 사이트의 배포 정보를 가져옵니다.
사이트의 귀속 정보를 통해 간접적으로 사이트의 URL을 얻다.
     void Application_Start(object sender, EventArgs e)
        {
            //var url = HttpContext.Current.Request.Url.ToString();
            var url = GetUrl();
            //  
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterOpenAuth();
        }

        private string GetUrl()
        {
            string path = System.Web.Hosting.HostingEnvironment.ApplicationID; // :/LM/W3SVC/3/ROOT
            string url = string.Empty;
            try
            {
                // HttpContext HttpContext 
                return HttpContext.Current.Request.Url.ToString();
            }
            catch (Exception)
            {
            }
            //  Path IIS 
            path = path.Replace("/LM", "").Replace("/ROOT", "");
            string entPath = string.Format("IIS://localhost{0}", path);
            DirectoryEntry entry = new DirectoryEntry(entPath);
            if (entry.Properties.Contains("ServerBindings"))
            {
                var bingdings = entry.Properties["ServerBindings"].Value.ToString();// 10.188.188.13:8082: 
                //  :  
                if (bingdings.EndsWith(":"))
                {
                    bingdings = bingdings.Substring(0, bingdings.Length - 1);
                }
                url = "http://"+bingdings;
            }

            return url;
        }

물론 이런 방법은 우리가 사이트 도메인 이름만 알 수 있는 상황에서만 적용되거나 우리가 처음 방문한 사이트의 초기 페이지를 확정할 수 있다.

좋은 웹페이지 즐겨찾기