.NET HttpClient。文字列値をPOSTする方法は?


174

C#とHttpClientを使用して次のPOSTリクエストを作成するにはどうすればよいですか。 User-Agent:Fiddler Content-type:application / x-www-form-urlencoded Host:localhost:6740 Content-Length:6

私のWEB APIサービスにそのようなリクエストが必要です。

[ActionName("exist")]
[HttpPost]
public bool CheckIfUserExist([FromBody] string login)
{           
    return _membershipProvider.CheckIfExist(login);
}

1
画像でどのHTTPクライアントを使用していますか?
ブリムストーン2016


1
サービスはWeb Api MVCです。リクエストのJSON形式
Kiquenet 2018

回答:


433
using System;
using System.Collections.Generic;
using System.Net.Http;

class Program
{
    static void Main(string[] args)
    {
        Task.Run(() => MainAsync());
        Console.ReadLine();
    }

    static async Task MainAsync()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:6740");
            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("", "login")
            });
            var result = await client.PostAsync("/api/Membership/exists", content);
            string resultContent = await result.Content.ReadAsStringAsync();
            Console.WriteLine(resultContent);
        }
    }
}

1
hm、私のHttpClientExtensionsにはそのような過負荷はありません...私はフレームワーク4.0を使用しています
Ievgen Martynov

1
あなたが持っていないどのオーバーロード?Microsoft.AspNet.WebApi.ClientプロジェクトにNuGet がインストールされていることを確認してください。HttpClientクラスがない、.NET 4.0で、.NET 4.5で構築されています。.NET 4.0で使用する場合は、NuGetが必要です。
Darin Dimitrov 2013年

1
最初に遭遇したC#SSSCE。適切なIDEの言語を使用している場合、実行するのはとても簡単です。
バッファロー

13
ステートメントを使用してHttpClientを使用するのは間違いです
ren

26
静的な読み取り専用HttpClient _client = new HttpClient();をプライベートにする必要があります。代わりにaspnetmonsters.com/2016/08/2016-08-27-httpclientwrong
Sameer Alibhai

35

以下は同期的に呼び出す例ですが、await-syncを使用することで簡単に非同期に変更できます。

var pairs = new List<KeyValuePair<string, string>>
            {
                new KeyValuePair<string, string>("login", "abc")
            };

var content = new FormUrlEncodedContent(pairs);

var client = new HttpClient {BaseAddress = new Uri("http://localhost:6740")};

    // call sync
var response = client.PostAsync("/api/membership/exist", content).Result; 
if (response.IsSuccessStatusCode)
{
}

1
これでうまくいくとは思いません。"login"を空の文字列に置き換える必要があります。KeyValuePair<string、string>( ""、 "abc")である必要があります。承認された回答を参照してください。
joedotnot

これは私にとっては機能し、$ company_id = $ _POST( "company_id");を呼び出すphp webserviceで機能します。そのように。jsonとして送信すると、phpが機能しません。
teapeng

8

asp.netのWebサイトに質問に関する記事があります。お役に立てれば幸いです。

ASPネットでAPIを呼び出す方法

http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

これは、記事のPOSTセクションの一部です。

次のコードは、JSON形式のProductインスタンスを含むPOSTリクエストを送信します。

// HTTP POST
var gizmo = new Product() { Name = "Gizmo", Price = 100, Category = "Widget" };
response = await client.PostAsJsonAsync("api/products", gizmo);
if (response.IsSuccessStatusCode)
{
    // Get the URI of the created resource.
    Uri gizmoUrl = response.Headers.Location;
}

リクエストはフォーム
URLエンコード

これはform-urlencodedです。とにかく、JSON形式のためのDateTimeプロパティ?シリアル化の問題?
Kiquenet 2018

4
私はあなたのメソッド「PostAsJsonAsync」に気付いていないようです。それは私のHttpClientインスタンスでは利用できません。
トミーホルマン2018年

4

ここで私が使用してポストリクエストを送信され、この記事を見つけたJsonConvert.SerializeObject()StringContent()するHttpClient.PostAsyncデータ

static async Task Main(string[] args)
{
    var person = new Person();
    person.Name = "John Doe";
    person.Occupation = "gardener";

    var json = Newtonsoft.Json.JsonConvert.SerializeObject(person);
    var data = new System.Net.Http.StringContent(json, Encoding.UTF8, "application/json");

    var url = "https://httpbin.org/post";
    using var client = new HttpClient();

    var response = await client.PostAsync(url, data);

    string result = response.Content.ReadAsStringAsync().Result;
    Console.WriteLine(result);
}

1

あなたはこのようなことをすることができます

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:6740/api/Membership/exist");

req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";         
req.ContentLength = 6;

StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
streamOut.Write(strRequest);
streamOut.Close();
StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
string strResponse = streamIn.ReadToEnd();
streamIn.Close();

そして、strReponseには、Webサービスから返された値が含まれている必要があります。


25
ここでの質問HttpClientは、古いものではなく、新しいものをどのように使用するかについてでしたWebRequest
Darin Dimitrov 2013年

確かに気づかなかった、誰かが古いものを必要とする場合に備えて、とにかく投稿を残しておきます...
Axel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.