我使用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
这样做。
感谢您的帮助。
答案 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
值)。你正在使用的序列化规则看起来相当自定义,所以我认为你不得不自己动手。