문제

WCF에 대한 휴식 서비스를 구축하고 있으며 작성하는 방법 중 하나는 GetProfile이며 주어진 사용자 이름에 대한 프로필을 반환합니다. 사용자 이름에는 사용자의 도메인이 포함되므로 다음 형식이 있습니다. "도메인 username".

따라서 Profiles.svc라는 서비스가 있습니다. 여기에는 다음 엔드 포인트가 설정되어 있습니다.

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

그러나 내가 서비스를 방문하려고 할 때 http : //server/profiles.svc/domain%5cusername (%5c는 urlencoded 형태의 백 슬래시입니다) 다음 오류가 발생합니다.

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

이것은 getProfile의 구현에 실제로 정의 된 코드가 없어도 발생하므로 WCF가 URI를 메소드에 바인딩하려는 시점에서 오류가 발생한다고 생각합니다.

REST WCF 서비스에서 백 슬래시를 URL에 추가 할 수 있도록 웹 서비스 구성에 추가해야 할 설정이 있습니까? 아니면 백 슬래시는 단순히 허용되지 않습니까?

도움이 되었습니까?

해결책

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

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

또한 사용자 이름을 DomainName 및 사용자 이름으로 분리하고 일반 경로 구분 분리기 '/'를 사용할 수도 있습니다. 나는 이것이 당신이 확실히하는 방법인지 알기에 충분히 유사하지 않지만, 이것이 나의 최선의 추측이 될 것입니다.

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top