2013-03-29 2 views
3

HTTP POST 요청 :이 방법에 대한 HTTP POST 요청을 공식화 피들러를 사용하고 있지만, 그것은 Status Code - 400 Bad Request을 반환WCF RESTful 서비스 - 나는 다음 포스트 방법으로 WCF 서비스를 개발

[OperationContract] 
[WebInvoke(Method = "POST", 
    ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Wrapped, 
    UriTemplate = "/InsertBearingData")] 
bool InsertBearingData(String JSONString); 

.

요청 헤더 :

Host: localhost:21468 
Content-Length: 96 
Content-Type: application/json 

요청 본문 :

[{"start time":"29-03-2013 11:20:11.340","direction":"SW","end time":"29-03-2013 11:20:14.770"}] 

당신이 방법을 얻기 위해 좋은 요청을 공식화 말해 주시겠습니까이 공식화 요청입니다 성공적인 응답?

+0

서비스를 어떻게 호스팅합니까? 요청의 URI는 무엇입니까? – carlosfigueira

+0

Visual Studio에서 실행되었습니다. URI는 다음과 같습니다. http : // localhost : 21468/DBService.svc/InsertBearingData – user1135357

+0

'나는 HTTP POST를 공식화하기 위해 Fiddler를 사용하고 있습니다.'라고 말했습니까? Fiddler에서 사용한 URL은 무엇입니까? 그리고 Visual Studio의 프로젝트 유형은 무엇입니까 (즉, 무엇을 실행하고 있습니까?)? – carlosfigueira

답변

3

코드에서 몇 가지 문제가 있습니다

  • 매개 변수의 데이터 유형은 문자열입니다,하지만 당신은 그것에 JSON 배열을 전달하는; 문자열 매개 변수를 전달하려면 JSON 문자열이 필요합니다.
  • 작업의 바디 스타일 파라미터 는 같은 요청을 수신하기 위해, 그 키 매개 변수 이름은 개체에 래핑 {"JSONString":<the actual parameter value>}

같을 것을 의미 Wrapped로 설정된 전송하는 경우 다음과 같은 작업이 필요합니다.

[ServiceContract] 
public interface ITest 
{ 
    [WebInvoke(Method = "POST", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Bare, 
     UriTemplate = "/InsertBearingData")] 
    bool InsertBearingData(MyType[] param); 
} 

[DataContract] 
public class MyType 
{ 
    [DataMember(Name = "start time")] 
    public string StartTime { get; set; } 
    [DataMember(Name = "end time")] 
    public string EndTime { get; set; } 
    [DataMember(Name = "direction")] 
    public string Direction { get; set; } 
} 
+0

도움을 주셔서 감사합니다. 하나의 마지막 질문 : 두 개 이상의 레코드가있는 배열을 보내면 InsertBearingData 메서드를 사용하여 반복하는 방법은 무엇입니까? – user1135357

+1

죄송합니다. 코드에서 실수를했습니다. 연산 매개 변수 유형은 MyType의 * 배열 *이어야합니다. 입력은 JSON 배열이므로 게시물을 수정하여 수정했습니다. – carlosfigueira

+0

고맙습니다. 나는 이미 그것을 알아 냈다. 배열 대신에'List '을 실행했고 너무 효과가있었습니다. – user1135357