programing

Application_Start of Global.aspx에서 전체 호스트 이름 + 포트 번호를 가져오는 방법은 무엇입니까?

telecom 2023. 8. 8. 20:02
반응형

Application_Start of Global.aspx에서 전체 호스트 이름 + 포트 번호를 가져오는 방법은 무엇입니까?

나는 노력했다.

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

로컬 컴퓨터에서 잘 작동했지만 IIS7에 게시될 때 다음과 같은 예외가 있습니다.

System.Web.HttpException: Request is not available in this context

이거 어떻게 하는지 아는 사람?

웹 응용프로그램이 시작될 때 처리 중인 HTTP 요청이 없습니다.

요청 컨텍스트를 사용할 수 있는 Application_BeginRequest(Object Sender, EventArges) 메서드 정의를 처리할 수 있습니다.

편집: 다음은 Michael Shimmins가 링크한 Mike Volodarsky의 블로그에서 영감을 얻은 코드 샘플입니다.

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

승인된 답변은 좋지만 대부분의 경우(첫 번째 요청이 HTTP 요청인 경우) 다음을 사용하는 것이 좋습니다.Session_Start이벤트 - 20분 정도마다 사용자당 한 번씩 호출됩니다(세션이 유효한 기간은 확실하지 않습니다).Application_BeginRequest모든 요청에 대해 해고됩니다.

public void Session_Start(Object source, EventArgs e)
{
   //Request / Request.Url is available here :)
}

만약 누군가가 이 주제에 대해 실제로 검색하기로 결정한다면, 이것에 대답하는 것은...

이것은 모든 모드에서 응용 프로그램 시작에서 작동합니다...

typeof(HttpContext).GetField("_request", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(HttpContext.Current)

언급URL : https://stackoverflow.com/questions/4243270/how-to-get-full-host-name-port-number-in-application-start-of-global-aspx

반응형