2012-04-03 2 views
6

System.Uri 클래스가 생성자에 전달 된 인코딩 된 URL을 인코딩 해제하지 않도록하려면 어떻게해야합니까? 다음 코드를 고려하십시오. -System.Uri에서 URL 인코딩 해제를 중단하려면 어떻게해야합니까?

Uri uri = new Uri("http://foo.bar/foo%2FBar"); 
Console.WriteLine(uri.AbsoluteUri); 
uri = new Uri("http://foo.bar/foo%2FBar", false); 
Console.WriteLine(uri.AbsoluteUri); 
uri = new Uri("http://foo.bar/foo%2FBar", true); 
Console.WriteLine(uri.AbsoluteUri); 

각 경우 출력은 "http://foo.bar/foo/bar"입니다. Uri 인스턴스를 인스턴스화 한 후 Uri.AbsoluteUri가 "http://foo.bar/foo%2FBar"를 반환하도록하려면 어떻게해야합니까?

답변

4

uri.OriginalString을 사용하여 초기화에 사용 된 문자열을 검색 할 수 있지만 Uri 클래스는 이스케이프 된 URI를 생성하는 데 사용되지 않습니다. URI를 안전하게 다시 인코딩해야하는 경우 UrlEncode를 사용해야합니다.

또한 http://msdn.microsoft.com/en-us/library/9zh9wcb3.aspx에 따라 Uri 이니셜 라이저의 dontEscape 매개 변수는 더 이상 사용되지 않으며 항상 false입니다.

는 UPDATE : - 이미를 UrlEncode를 사용하고 GETting a URL with an url-encoded slash

+0

사람이 할 수있는 방법 (해킹)을 발견 보인다. 내 문제는 실제로 HttpWebRequest 인스턴스를 구성하여 URL에서 이스케이프 처리 된 문자 (위에서 설명한 바와 같이 슬래시 포함)가있는 REST 호출을 만들 때 발생합니다. 요청을 생성하기 위해 WebRequest.Create (UrlString) 오버로드를 사용하고 있으며 서버에 전달되는 URL이 인코딩 된 슬래시를 인코딩 해제하여 서버 측 오류를 일으킨다는 것을 알아 냈습니다. 더 많은 테스트 결과에 따르면 이것이 Uri 클래스의 문제 일 가능성이 높습니다. – Cleggy

+0

업데이트에서 링크보기 – PinnyM

+0

링크를 보내 주셔서 감사합니다, PinnyM. "끔찍한 해킹"성질로 인해, 나는 그 길로 가야하는지, 아니면 내 문제를 해결하기 위해 또 다른 압정을 완전히 가져야하는지 궁금합니다. 현재 REST 서비스를 호출하려고 시도하고 있지만 SOAP 대신 SOAP로 변경하는 유연성이 있으며이 문제도 완화해야합니다. 그럼에도 불구하고, 당신은이 특별한 문제를 해결했습니다, 그래서 나는 이것을 정답으로 표시 할 것입니다. – Cleggy

관련 문제