2017-11-21 5 views
0

Ich habe ein paar ähnliche Fragen hier, aber keine haben für dieses spezielle Problem gearbeitet.WCF REST Service: Methodenparameter (Objekt) ist immer Null

Ich habe einen WCF Rest Web-Service und seine Arbeit in Ordnung für GET. Eine Methode ist ein POST, und wenn ich den json-Parameter übergebe, wird der Parameter, der übergeben wird, null, wenn die Methode auf dem Webserver ausgeführt wird. Hier

ist der Code:

Client-Call:

public async Task Test() 
    { 
     HttpClient client; 
     client = new HttpClient(); 
     client.MaxResponseContentBufferSize = 2147483646; 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     ContactParameter cp = new ContactParameter(); 
     cp.ApptDateFrom = DateTime.Now; 
     cp.ApptDateTo = DateTime.Now.AddDays(1); 
     cp.Code = "00"; 
     cp.Type = Enums.ContactType.Person; 
     cp.Status = string.Empty; 

     string RestUrl = "http://localhost:61919/data.svc/GetBooked"; 
     var uri = new Uri(string.Format(RestUrl, string.Empty)); 

     JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings 
     { 
      DateFormatHandling = DateFormatHandling.MicrosoftDateFormat, 
     }; 

     //json string = {"Code":"00","ApptDateTo":"2017-11-22T14:02:01.8758558+00:00","ApptDateFrom":"2017-11-21T14:02:01.8718458+00:00","Type":67,"Status":"A"} 
     var json = JsonConvert.SerializeObject(cp); 

     var content = new StringContent(json, Encoding.UTF8, "application/json"); 
     var response = await client.PostAsync(uri, content); 
    } 

WCF Web-Service-Vertrag:

[OperationContract] 
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetBooked")] 

    List<Contact> GetBooked(ContactParameter contactParameter); 

Kontakt Parametertyp

namespace CatService.Types 
    { 
     [DataContract (Name = "contactParameter")] 
     public class ContactParameter 
      { 
       [DataMember(Name = "Code")] 
       public string Code { get; set; } 
       [DataMember(Name = "ApptDateTo")] 
       public DateTime ApptDateTo { get; set; } 
       [DataMember(Name = "ApptDateFrom")] 
       public DateTime ApptDateFrom { get; set; } 
       [DataMember(Name = "Type")] 
       public Enums.Enums.Type Type { get; set; } 
       [DataMember(Name = "Status")] 
       public string Status { get; set; } 

      } 
    } 

Ich habe versucht, die WebMessageBodyStyle.Bare zu ändern, aber dann erhalte ich einen Statuscode: 400, ReasonPhrase: 'Bad Request'. Wenn ich eine Testmethode versuche, die nur eine Zeichenfolge akzeptiert, funktioniert es.

Antwort

0

Ich bekomme auch das gleiche Problem. Ich schlage vor, Sie sollten Ihre Post-Methode in einer anderen Konsolen-App ausprobieren. Wegen der POST-Methode, nicht auf URL zu sein.

0

Dies war ein Datetime Problem, ich habe die Antwort auf einen früheren Post nicht implementiert. Basicaly:

JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings 
     { 
      DateFormatHandling = DateFormatHandling.MicrosoftDateFormat, 
     }; 

Dann, wenn Sie Serialisierung ....

var json = JsonConvert.SerializeObject(jsonString, microsoftDateFormatSettings);