문제

사용자를 내 웹 애플리케이션의 루트에 있는 로그인 페이지로 다시 리디렉션하려는 방법이 있습니다.

다음 코드를 사용하고 있습니다.

Response.Redirect("~/Login.aspx?ReturnPath=" + Request.Url.ToString());

하지만 이것은 작동하지 않습니다.내 가정은 ASP.NET이 자동으로 URL을 올바른 경로로 확인한다는 것입니다.일반적으로 나는 그냥 사용합니다

Response.Redirect("../Login.aspx?ReturnPath=" + Request.Url.ToString());

하지만 이 코드는 마스터 페이지에 있으며 모든 폴더 수준에서 실행할 수 있습니다.이 문제를 어떻게 해결합니까?

도움이 되었습니까?

해결책

"~/"를 삭제하고 "/"로만 바꿔야 한다고 생각합니다. /가 루트라고 생각합니다.

바로 거기에 멈춰라! :-) 웹사이트의 루트에만 설치될 수 있도록 웹앱을 하드코딩하려는 경우는 제외됩니다.

"~/" ~이다 사용하는 것이 정확하지만 원본 코드가 예상대로 작동하지 않는 이유는 ResolveUrl (내부적으로 사용됩니다. Redirect)는 전달하는 경로가 절대 URL(예:"**http://서버/**foo/bar.htm"은 "foo/bar.htm"과 반대됨) - 안타깝게도 이는 사용자가 제공한 URL에서 콜론 문자 ':'만 검색하면 됩니다.하지만 이 경우에는 사용자가 제공한 URL에서 콜론을 찾습니다. ReturnPath 쿼리 문자열 값은 속입니다. 따라서 '~/'가 해결되지 않습니다.

해결 방법은 URL을 인코딩해야 한다는 것입니다. ReturnPath 다른 특수 문자와 함께 문제가 있는 ':'을 이스케이프하는 값입니다.

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.ToString()));

또한 귀하(또는 누구라도)는 절대 사용하지 않는 것이 좋습니다. Uri.ToString - 사람이 읽을 수 있고 좀 더 "친숙한" 버전의 URL을 제공하기 때문입니다. 반드시 올바른 버전은 아닙니다(이스케이프 처리되지 않음).대신 다음과 같이 Uri.AbsoluteUri를 사용하십시오.

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.AbsoluteUri));

다른 팁

먼저 URL을 확인할 수 있습니다. Response.Redirect ( "~ / Login.aspx); 해결 된 후 매개 변수를 추가합니다.

사용 방법 라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top