我需要HTTP POST
一個複雜的類型到一個Web服務(我不控制)。我相信Web服務是使用ASP.NET MVC的舊版本構建的。它模型綁定格式爲form-url-encoded
的有效載荷。Post複雜類型格式化爲使用ASP.Net格式url編碼HttpClient
如果我對它進行如下操作,它可以完美地工作。如您所見,我手動創建了一組鍵/值對。
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的自定義格式化程序:http://code.msdn.microsoft.com/windowsdesktop/Converting-between-cda3c9a7,但是這涉及到從JObject轉換到FormUrlEncoded。我不喜歡暗示這一點,但是您可以使用Json.net序列化器將您的複雜類型轉換爲JObject,然後將此JObject轉換爲鏈接中建議的formurlencoded。 –