내가하려고하는 일은 겉으로보기에 단순하다. 요청 본문을 통해 POX를 보내고 WCF 서비스에서 처리하고 201 상태 코드를 반환한다. 내 ServiceContract에서 다음 메서드를 정의했습니다.WCF ReSTful 서비스에서 POST 또는 PUT 요청의 Content-Type이 'application/x-www-form-urlencoded'여야합니까?
[WebInvoke(Method = "PUT", UriTemplate = "/content/add", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml, RequestFormat=WebMessageFormat.Xml)]
[OperationContract]
Stream AddContent(Stream input);
여기서 동사는 중요하지 않습니다. 나는 'PUT'을 'POST'로 쉽게 바꿀 수 있었고 같은 결과를 얻었습니다. 작은 결과의 무엇이 방법이 실제로 수행
public Stream AddContent(Stream input)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Created;
}
내가 절차 모든 코드를 생략했기 때문에 다음과 같이 위의 방법의 구현입니다. 이 기능을 테스트하기 위해 내가 피들러를 해고 다음과 같은 요청을 발행 :
User-Agent: Fiddler
Host: myhost.com
Content-Length: 771
Content-Type: text/xml && application/xml; charset: utf8
<xmlDataGoesHere></xmlDataGoesHere>
콘텐츠 유형에 대한 제공된 값이, 나도 알아, 난 그냥 설명하기 위해 그것을 사용하고 잘못된 내가 시도 컨텐츠 유형의. Fiddler에서 'Execute'를 클릭하면 내 서비스의 응답 코드가 400 Bad Request가됩니다. 내 서비스 방법이 실제로이 세 번째 상황에서 타격을 입지 않는다는 사실에 주목할 필요가 있습니다. 요청은 심지어 도착하기 전에 죽습니다. 나는 상태 코드 내 서비스에서 반환 지금 피들러 요청이 만든 201 실행하면
Content-Type: application/x-www-form-urlencoded
: 그래서 제거의 읽기 및 프로세스의 풍부한 양 후 나는에 콘텐츠 형식을 변경했습니다. URLEncoded 이외에 Content-Type을 설정할 수없는 이유는 무엇입니까? ServiceContract에서 BodyStyle 및 RequestFormat 속성을 조정하려고했지만 결과에 아무런 영향도 미치지 않았습니다. 누가 이런 일이 일어나고 있는지 알 수 있습니까?
답장을 보내 주셔서 감사합니다. 하지만 여기에 설명 된 POX 포맷터를 사용하는 경우에도 http://wcfrestcontrib.codeplex.com/wikipage?title=De%2fserialization%20Overview&referringTitle=Home을 사용하면 content-type으로 text/xml을 전달할 수 없습니다. 더 나아가 그것은 또한 내가 application/x-www-form-urlencoded로 전달하는 것을 막는다. 두 요청 모두 400 개의 오류가 발생합니다! – dparsons