~ 경로를 사용하여 응답.리디렉션
-
09-06-2019 - |
문제
사용자를 내 웹 애플리케이션의 루트에 있는 로그인 페이지로 다시 리디렉션하려는 방법이 있습니다.
다음 코드를 사용하고 있습니다.
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); 해결 된 후 매개 변수를 추가합니다.
사용 방법 라코 디스