如何将FormCollection对象发布到HTTP客户端

时间:2016-03-17 07:21:20

标签: c# asp.net-web-api httpclient dotnet-httpclient

我使用HTTP Client调用RESTFul服务。现在我有要求我必须将FormCollection对象传递给API。 API不是REST API。有关API的更多信息,您可以在此链接中看到。 http://docs.pay4later.com/docs/requests

我想过使用HTTPCLINET来实现这一点。使用以下代码,我能够得到响应。

using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://testurl/");
                    var content = new FormUrlEncodedContent(new[]
                                                            {
                                                                new KeyValuePair<string, string>("Identification[api_key]", "somekey"),
                                                              new KeyValuePair<string, string>("Identification[InstallationID]", "installationid"),
                                                              new KeyValuePair<string, string>("action", "credit_application_link"),
                                                                new KeyValuePair<string, string>("Goods[Description]", "test"),
                                                                new KeyValuePair<string, string>("Identification[RetailerUniqueRef]", Guid.NewGuid().ToString()),
                                                                new KeyValuePair<string, string>("Goods[Price]", "100000"),
                                                                new KeyValuePair<string, string>("Finance[Code]", "PQERTS"),
                                                                new KeyValuePair<string, string>("Finance[Deposit]", "92000")
                                                            });
                var result = client.PostAsync("", content).Result;
                string resultContent = result.Content.ReadAsStringAsync().Result;
            }

上述功能完美无缺。但是,我想构建一个模型,并希望使用HttpClient发送该模型。但这并不成功,因为请求是以json对象的形式出现的。该模型如下所示,

public class CreditApplicationInitializationRequest
    {
        public string action { get; set; }

        public Identification Identification { get; set; }

        public Goods Goods { get; set; }

        public Finance Finance { get; set; }
    }
public class Identification
    {
        public string api_key { get; set; }

        public string RetailerUniqueRef { get; set; }

        public string InstallationID { get; set; }
    }

我想知道,这个方法是否可行,或者是否有任何其他标准方法使用httpclient这样做。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

看起来你走在正确的轨道上; checkout Newtonsoft.Json - 它是一个NuGet包,提供了使用Json的方法。特别是,您可以使用属性注释属性,以控制包序列化和将对象反序列化为Json对象的方式。

示例如下:

    [JsonObject(MemberSerialization.OptIn)]
    public class Person
    {
        // "John Smith"
        [JsonProperty]
        public string Name { get; set; }

        // "2000-12-15T22:11:03"
        [JsonProperty]
        public DateTime BirthDate { get; set; }

        // new Date(976918263055)
        [JsonProperty]
        [JsonConverter(typeof(JavaScriptDateTimeConverter))]
        public DateTime LastModified { get; set; }

        // not serialized because mode is opt-in
        public string Department { get; set; }
    }

您可以在http://www.newtonsoft.com/json/help/html/SerializationAttributes.htm找到更多信息。

答案 1 :(得分:0)

HttpClient仅关注发送/接收原始内容;序列化留给其他库。我打算建议Flurl,它允许你用PostUrlEncodedAsync方法形成一个对象,但它假设对象属性是简单类型(它只是ToString值)。你正在使用的序列化规则看起来相当自定义,所以我认为你不得不自己动手。