【发布时间】:2013-06-17 13:15:02
【问题描述】:
我需要HTTP POST 一个复杂类型到一个网络服务(我无法控制)。我相信 Web 服务是使用旧版本的 ASP.NET MVC 构建的。它模型绑定格式为form-url-encoded的有效载荷。
如果我向它发射以下内容,它会完美运行。如您所见,我手动创建了一组键/值对。
var values = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Username", "some-username"),
new KeyValuePair<string, string>("Password", "some-password"),
new KeyValuePair<string, string>("Product", "some-product")
};
var content = new FormUrlEncodedContent(values);
var response = new HttpClient().PostAsync(url, content).Result;
但我不想这样做,我只想尽可能发送复杂类型。
var content = new ComplexType("some-username", "some-password", "some-product");
var response = new HttpClient().PostAsync(url, content).Result;
我相信曾经有一个HttpRequestMessage<T>,但它已经被放弃了
HttpClient.PostAsJsonAsync<T>(T value) sends “application/json”
HttpClient.PostAsXmlAsync<T>(T value) sends “application/xml”
但我不想发送Json 或XML 我想发送form-url-ecncoded,而无需将复杂类型转换为键/值对集合。
基本上我也想知道 Jaans 对this question 的回答(他是对第二个回答的第二个评论)。
谁能给点建议。
【问题讨论】:
-
Web API 确实有一个
FormUrlEncodedMediaTypeFormatter,但是这个格式化程序不能“写”,只能“读”。因此,Web API 对此没有开箱即用的支持。 -
那真是太可惜了。有人知道体面的工作吗?
-
您可能可以看一下来自 Carlos 的自定义格式化程序:code.msdn.microsoft.com/windowsdesktop/…,但这涉及从 JObject 转换为 FormUrlEncoded。我不喜欢这样建议,但您可以使用 Json.net 序列化程序将您的复杂类型转换为 JObject,然后按照链接中的建议将此 JObject 转换为 formurlencoded。
-
这可能是要走的路。谢谢基兰
标签: c# asp.net-web-api