【发布时间】:2017-11-20 11:07:52
【问题描述】:
我正在尝试使用 HttpClient 通过 Xamarin 调用 WCF Rest 服务。我尝试了很多方法,但理想情况下我需要传递自定义类型。
我们收到 Http Error 400 - Bad Request。
我创建了一个基本测试来模仿 Xamarin 所做的事情,但仍然得到相同的错误。代码如下:
WCF 服务接口/方法:
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "GetBookedContacts")]
List<Contact> GetBookedContacts(ContactParameter contactParameter);
测试功能:
public async Task TestWebServiceCallAsync()
{
HttpClient client;
client = new HttpClient();
client.MaxResponseContentBufferSize = 256000;
ContactParameter cp = new ContactParameter();
cp.ApptDateFrom = DateTime.Now;
cp.ApptDateTo = DateTime.Now.AddDays(1);
cp.Code = "0001";
cp.Type = Enums.ContactType.Person;
string RestUrl = "http://testws/Rest/data.svc/GetBookedContacts";
var uri = new Uri(string.Format(RestUrl, string.Empty));
var json = JsonConvert.SerializeObject(cp);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync(uri, content);
}
我们正在使用 Newtonsoft.Json 库转换自定义类型。
如果我在同一个 Web 服务上创建另一个函数,只使用一个字符串参数,它就可以正常工作。
一定是类型问题,但是我在网络服务中有如下标记的类型:
[DataContract]
public class ContactParameter
{
[DataMember]
public string Code { get; set; }
[DataMember]
public DateTime ApptDateTo { get; set; }
[DataMember]
public DateTime ApptDateFrom { get; set; }
[DataMember]
public Enums.Enums.ContactType Type { get; set; }
[DataMember]
public string Status { get; set; }
}
public class Enums
{
[DataContract]
public enum ContactType
{
[DataMember]
[EnumMember]
Person= 'P',
[DataMember]
[EnumMember]
Other= 'T'
}
}
【问题讨论】:
标签: c# rest wcf httpclient