2011-02-23 5 views
29

URL을 작성하는 Silverlight 응용 프로그램이 있습니다. 이 URL은 REST 기반 서비스에 대한 호출입니다. 이 서비스는 위치를 나타내는 단일 매개 변수를 필요로합니다. 위치는 "도시, 주"의 형태입니다. 이 URL을 구축하기 위해, 나는 다음과 같은 코드를 호출하고 있습니다 :URL의 인코딩 매개 변수

string url = "http://www.domain.com/myService.svc/"; 
url += HttpUtility.UrlEncode(locationTextBox.Text); 

사용자가 locationTextBox에 "시카고"를 입력하면이 결과는 다음과 같다 :하지만 현실에서

http://www.domain.com/myService.svc/chicago%2c+il 

, 나는 URL이 다음과 같이 보이기를 기대했습니다.

http://www.domain.com/myService.svc/chicago,%20il 

브라우저 URL을 통해 서비스를 테스트 할 때 예상되는 작동합니다. 그러나 생성되는 URL이 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

50

나는 Uri을 권하고 싶습니다. HttpUtility 함수 대신 EscapeDataString을 사용하십시오. Server.UrlEncode vs. HttpUtility.UrlEncode의 토론을 참조하십시오.

+1

에 '#'문자 오류가 있습니다. Pls 여기 내 질문을 참조하십시오 : http://stackoverflow.com/questions/31699335/regex-to-validate-a-string-that-will-be-one-of-the-of-wcf-rest-method-url- 파라 메 – Muhammedh

6

UrlPathEncode() 메서드를 사용해보십시오. http://msdn.microsoft.com/en-us/library/h10z5byc.aspx

인용구 : : 는의 발언을보기

당신은 를 UrlEncode() 메서드 또는 UrlPathEncode() 메서드를 사용하여 URL을 인코딩 할 수 있습니다. 그러나 메서드는 다른 결과를 반환합니다. UrlEncode() 메서드는 각 공백 문자 을 더하기 문자 (+)로 변환합니다. UrlPathEncode() 메서드는 각 공백 문자를 16 진수 표기법의 공백을 나타내는 문자열 "% 20"로 변환합니다. URL의 경로 부분을 인코딩하여 에 일치하는 디코딩 된 URL을 보장하려면 UrlPathEncode() 메서드를 사용하십시오. 브라우저 또는 브라우저가 디코딩을 수행하는 것과 관계 없습니다.

0

가장 안전한 방법은 AntiXss 라이브러리를 사용하는 것입니다. URL 인코딩, Html 및 HtmlAttribute 인코딩 등과 같이 다양한 목적으로 내용을 인코딩하기위한보다 표준적이고 안전한 버전이 있습니다. MS 사이트 (http://www.microsoft.com/downloads/details.aspx?FamilyId=051ee83c-5ccf-48ed-8463-02f56a6bfc09)에서 다운로드 할 수있는 이전 3.1 버전이 있습니다. 이전 .NET 버전과 호환되며 http://wpl.codeplex.com/

관련 문제