2015-06-04 10 views
8

W mojej usłudze WCF (chmura lazurowa) chcę wspierać JSON. Tworzę niektóre metody testowania, aby sprawdzić, czy wszystko działa. Mogę dostać GET zwraca się do pracy, ale kiedy robię post z prostego parametru będzie zawsze dotrzesz:Żądanie WCS JSON POST, parametr pojedynczego ciągu niewiążący i zwracający 400

The remote server returned an error: (400) Bad Request. 

Jeśli nie wysłać parametru spowoduje, że wykonanie metody, ale z wartość pusta jako parametr oczywiście. Próbowałem różnych formatów JSON i WebMessageBodyStyle, ale żaden nie wydaje się działać.

Jeśli zmienię typ parametru na Strumień, otrzymam dane, ale muszę je ręcznie deserializować. To nie powinno być konieczne, prawda?

Interfejs:

 [OperationContract] 
     [WebInvoke(UriTemplate = "Test", 
      Method = "POST", 
      BodyStyle = WebMessageBodyStyle.WrappedRequest, 
      RequestFormat = WebMessageFormat.Json, 
      ResponseFormat = WebMessageFormat.Json)] 
     string Test(string data); 

IMPL: klient

 public string Test(string data) 
     {   
      return "result is " + data; 
     } 

Test:

  WebClient client = new WebClient(); 
      client.Headers["Content-type"] = "application/json"; 
      client.Encoding = System.Text.Encoding.UTF8; 
      string jsonInput = "{'data':'testvalue'}"; 
      string postResponse = client.UploadString(postUrl, jsonInput); 
      Console.WriteLine("post response: " + postResponse); 

Odpowiedz

8

Złoty połączenie było użyć cudzysłowów w kodzie JSON połączeniu z WebMessageBodyStyle.WrappedRequest.

robocza JSON:

string jsonInput = "{\"data\":\"testvalue\"}"; 

Ustawiając WebMessageBodyStyle do Bare dodaje JSON działa:

string jsonInput = "\"testvalue\"";