2010-12-17 4 views
0

로그인 리디렉션 URL에 쿼리 문자열 매개 변수가 추가되는 프로덕션 응용 프로그램에서이 문제가 발생합니다. 이를 재현하려면 MVC2와 MVC3 R2로 테스트 한 새로운 MVC 프로젝트를 생성하십시오. HomeController에서 다음과 같은 작업을 추가로그인 URL에 원치 않는 매개 변수를 추가하는 ASP.NET MVC UnauthorizedResult

public ActionResult Break() 
{ 
    return new HttpUnauthorizedResult(); 
} 

시작 응용 프로그램 및 /home/break?a=1&b=2을 기록했다. 그래서 자연스럽게 /Account/LogOn?ReturnUrl=/home/break%3fa%3d1%26b%3d2로 리디렉션해야하지만 실제로뿐만 아니라 URL의 끝에 요청 매개 변수 (&a=1&b=2)를 추가합니다

alt text

왜 이런 일이? ReturnUrl의 인코딩 된 URL에 필수 매개 변수가 있으므로 이러한 매개 변수를 추가 할 필요가 없습니다. 프로덕션 응용 프로그램에서 뭔가있을 거라고 생각했지만 위의 단계를 수행하면 기본 MVC 응용 프로그램도이를 재현합니다. 이 문제를 해결하는 방법에 대한 의견을 보내 주시면 감사하겠습니다.

답변

1

이것은 LogOn 작업이 원래 (인코딩되지 않은) 쿼리 문자열 값에 액세스 할 수 있도록 수행됩니다.

는 그래서 URI

http://localhost:65183/Account/LogOn?ReturnUrl=/home/break%3fa%3d1%26b%3d2&a=1&b=2

ReturnUrl 키/값 쌍은 성공적인 로그인 후 리디렉션 할 URI입니다 주어진 그것은 이전 요청에서 인코딩 된 쿼리 문자열 쌍을 포함하고 있습니다.

이 동작을 변경하려면 리디렉션 기능을 재정의해야합니다.

protected void Application_EndRequest(object sender, EventArgs e) 
{ 
    if (Response.RedirectLocation != null && Response.RedirectLocation.Contains("ReturnUrl")) 
    { 
     // change redirect URI 
    } 
} 
+0

감사합니다. 생각하기에 이제는 처음부터 매우 호기심이 생겼습니다. 나는 의도적으로이 일을 남겨 둘 것이다. – TheCloudlessSky

관련 문제