반응형
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
반응형
'programing' 카테고리의 다른 글
사용자 지정 구성 요소에 변수 전달 (0) | 2023.08.08 |
---|---|
도커 오류 바인딩: 주소가 이미 사용 중입니다. (0) | 2023.08.08 |
ActiveWindow를 사용하지 않고 VBA를 사용하여 Excel에서 격자선을 끄는 방법 (0) | 2023.08.08 |
Python에서 파일 크기를 변환하는 더 나은 방법 (0) | 2023.08.08 |
node.js가 웹 서버라고 할 수 있습니까? (0) | 2023.07.29 |