我在这里看到了一些类似的问题,但是没有一个针对这个特定问题。
我有一个WCF REST Web服务,它的工作正常。一种方法是帖子,每当我称其为传递JSON参数时,该方法在Web服务器上运行时传递的参数为null。
这是代码:
客户端调用:
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服务合同:
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetBooked")]
List<Contact> GetBooked(ContactParameter contactParameter);
联系参数类型
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; }
}
}
我已经尝试更改webmessagebodystyle.bare,但随后我获得了一个状态代码:400,prasonsphrase:"糟糕的请求"。如果我尝试仅接受字符串的测试方法,则可以工作。
我也遇到了同样的问题。我建议您在另一个控制台应用程序上尝试您的帖子方法。因为帖子方法不在URL上。
这是日期时间问题,我没有在上一篇文章中实现答案。基本:
JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
};
然后,当您序列化....
var json = JsonConvert.SerializeObject(jsonString, microsoftDateFormatSettings);