2008-10-14 11 views
1

WCF에서 REST 서비스를 작성하고 있으며 작성중인 메소드 중 하나는 GetProfile이며 주어진 사용자 이름에 대한 프로파일을 리턴합니다. 사용자 이름은 사용자의 도메인을 포함하므로 "DOMAIN \ username"형식을 갖습니다.REST WCF URL에서 백 슬래시 (% 5c) 사용

그래서 저는 다음과 같은 엔드 포인트를 가지고 Profiles.svc라는 서비스가 설정 한

: 나는 http://server/profiles.svc/DOMAIN%5cusername (%의 5C에서 서비스를 방문 할 때

그러나
[OperationContract] 
[WebGet(UriTemplate = "/{username}", ResponseFormat = WebMessageFormat.Xml)] 
IRestResponse GetProfile(String username); 

는, 백 슬래시의를 urlencoded 형태이다) 나는 다음과 같은 오류가 발생합니다 : 실제로 GetProfile 내 구현에서 정의 된 코드가없는 경우에도이 문제가 발생합니다, 그래서 오류가 WCF가하는 방법에 URI를 바인딩하는 지점에서 발생되고있는 것으로 판단

Server error in '/' Application 
HTTP Error 400 - Bad Request

.

REST WCF 서비스의 URL에 백 슬래시를 추가하려면 웹 서비스 구성에 추가해야 할 몇 가지 설정이 있습니까? 또는 역 슬래시를 허용하지 않습니까?

답변

5

나는 그것이 URL의 해당 부분에 허용되지 않는다고 생각합니다. 그들은 인코딩 된 한 쿼리 문자열에서 괜찮습니다. 일반적으로 파일 이름 (예 :?)에 유효하지 않은 URL의 경로 부분에는 아무 것도 넣지 않습니다.

아마 다른 문자를 사용하여 사용자 이름과 도메인을 구분할 수 있습니다.

도메인 이름과 사용자 이름으로 사용자 이름을 구분하고 일반 경로 구분 기호 '/'를 사용할 수도 있습니다. 나는 이것이 당신이 그것을 확실히하는 방법인지 알기에 이것으로 충분히 익숙하지 않다. 그러나 이것은 나의 최고의 추측 일 것이다.

[OperationContract] 
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)] 
IRestResponse GetProfile(String domainName, String username); 
+2

도메인과 이름이 REST로 잘 표현되는 계층 적 관계를 가지고 있기 때문에이 방법 (/ {domainName}/{userName})을 사용하는 것이 올바른 방법 인 것 같습니다. –

+0

좋은 해결책. 우리는 REST URL을 생략해야했다. – Muhammedh

관련 문제