【问题标题】:Calling a Rest WCF Service via HttpClient通过 HttpClient 调用 Rest WCF 服务
【发布时间】: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


    【解决方案1】:

    问题在于您的日期时间格式。您应该设置日期时间格式。像这样:

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

    here你可以阅读更多。

    【讨论】:

    • 您好,感谢您的帮助。当我添加该代码时,它会更进一步。现在调用了 web 方法,但传递的对象为 null。你能想到什么明显的理由吗?我传递的 json 是: {"Code":"0001","ApptDateTo":"2017-11-22T11:24:17.2216251+00:00","ApptDateFrom":"2017-11-21T11:24: 17.2196202+00:00","类型":67,"状态":""}
    • 完全是另外一回事。它可以是任何东西。我建议关闭问题并询问另一个问题并提供服务器端代码。我猜你的代码有问题。
    • 是的,我会标记为已回答,因为不再有“错误请求”。我认为这是一个命名问题,就好像我用一个字符串做一个测试方法,并在 jSon 中命名不同的参数,它是空的。如果名称匹配,则字符串通过 ok
    猜你喜欢
    • 2014-04-30
    • 2010-10-31
    • 2011-11-21
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    相关资源
    最近更新 更多