8

HTTP POSTWeb サービス (私が制御していない) に複雑な型が必要です。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 が提示するこの質問に対する答えも知りたい です (彼は 2 番目の答えに対する 2 番目のコメントです)。

誰でもアドバイスしてください。

4

3 に答える 3

1

Flurl [開示: 私は著者です] は、まさにあなたが探しているものと思われる方法を提供します:

using Flurl.Http;

var resp = await url.PostUrlEncodedAsync(new {
    Username = "some-username",
    Password = "some-password",
    Product = "some-product",
});

Flurl は小型で持ち運び可能HttpClientで、ボンネットの下で使用されます。NuGet 経由で入手できます。

PM> Install-Package Flurl.Http
于 2014-07-30T19:03:31.450 に答える