2012-03-23 9 views
2

사용자 코드가 Response.Redirect이고 브라우저가 리디렉션 될 URL을 변경하면 가로 채기가 목표입니다. 이 URL을 변경하려면 Session에 액세스해야합니다 (Session에 저장되는 것은이 URL에 무엇을 넣어야하는지 알려주는 정보입니다). 대부분 상황에 따라 리디렉션 위치에 쿼리 인수를 추가하는 것입니다.ASP.Net PreSendRequestHeaders가 세션에 액세스 할 수 없습니다.

PreSendRequestHeadersResponse.RedirectLocation. 괜찮아. 그러나 여기서 세션 상태에 액세스 할 수 없습니다. 이 사건이 해고되기 전에 분명히 석방되었습니다.

그래서이 정보를 얻는 방법이 필요합니다. PreSendRequestHeaders; 또는 이것을 성취하기 위해 다른 방법이 필요합니다. 궁극적으로 내 목표는 브라우저가 리디렉션되는 위치의 쿼리 문자열에 인수를 추가하는 것입니다.

+0

당신이 쉬운 방법을 따르지 않는 이유는 - 당신이 좋아하는 매개 변수를 사용하여 처음부터 리디렉션을 만들 수 있습니까? – Aristos

+0

어떤 코드가 리디렉션을 시작하는지 항상 제어 할 수는 없기 때문에? – wasabi

답변

2

세션에 쓰는 코드를 수정할 수 있다면 Context.Items을 사용할 수 있습니다.

는 예를 들어, Response.RedirectPermanent 방법이 존재하기 전에, 나는 다음과 같은 사용 :

//in some library 
public static void PermanentRedirect(this HttpContext context, string url) 
{ 
    context.Items["IsPermanentRedirect"] = true; 
    context.Response.Redirect(url); 
} 

//in global.asax 
void Application_PreSendRequestHeaders(object sender, EventArgs e) 
{ 
    if (Response.IsRequestBeingRedirected && (bool) (Context.Items["IsPermanentRedirect"] ?? false)) 
    { 
     Response.Status = "301 Moved Permanently"; 
    } 
} 
관련 문제