1. ホーム
  2. c#

[解決済み] HTTP POST Web リクエストの作成方法

2022-03-15 07:35:44

質問内容

<ブロッククオート

正準
を使用してHTTPリクエストを行い、いくつかのデータを送信するにはどうすればよいですか? POST メソッドを使用できますか?

をすることができますね。 GET をリクエストすることはできますが、どのようにして POST をリクエストしてください。

解決方法は?

HTTPを実行するには、いくつかの方法があります。 GETPOST のリクエストに対応します。


方法A。HttpClient (推奨)

で利用可能です。 .NET Framework 4.5+ , .NET Standard 1.1+ , .NET Core 1.0+ .

現在ではこの方法が推奨されており、非同期で高性能である。ほとんどの場合、組み込みバージョンを使用しますが、非常に古いプラットフォームには NuGetパッケージ .

using System.Net.Http;

セットアップ

推奨 を1つインスタンス化し HttpClient をアプリケーションのライフタイムに使用し、共有しない特別な理由がない限り、共有します。

private static readonly HttpClient client = new HttpClient();

参照 HttpClientFactory には 依存性注入 の解決策になります。


  • POST

    var values = new Dictionary<string, string>
    {
        { "thing1", "hello" },
        { "thing2", "world" }
    };
    
    var content = new FormUrlEncodedContent(values);
    
    var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);
    
    var responseString = await response.Content.ReadAsStringAsync();
    
    
  • GET

    var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");
    
    

方法B:サードパーティライブラリ

レストシャープ

  • POST

     var client = new RestClient("http://example.com");
     // client.Authenticator = new HttpBasicAuthenticator(username, password);
     var request = new RestRequest("resource/{id}");
     request.AddParameter("thing1", "Hello");
     request.AddParameter("thing2", "world");
     request.AddHeader("header", "value");
     request.AddFile("file", path);
     var response = client.Post(request);
     var content = response.Content; // Raw content as string
     var response2 = client.Post<Person>(request);
     var name = response2.Data.Name;
    
    

Flurl.Http

流暢な API、テストヘルパー、HttpClient の使用、そしてポータブルを特徴とする新しいライブラリです。このライブラリは ニューゲット .

    using Flurl.Http;


  • POST

    var responseString = await "http://www.example.com/recepticle.aspx"
        .PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" })
        .ReceiveString();
    
    
  • GET

    var responseString = await "http://www.example.com/recepticle.aspx"
        .GetStringAsync();
    
    

方法C:HttpWebRequest(新しい作品には推奨しません。)

で利用可能です。 .NET Framework 1.1+ , .NET Standard 2.0+ , .NET Core 1.0+ . .NET Coreでは、ほとんどが互換性のためです。 HttpClient また、パフォーマンスも低く、新機能も得られません。

using System.Net;
using System.Text;  // For class Encoding
using System.IO;    // For StreamReader


  • POST

    var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
    
    var postData = "thing1=" + Uri.EscapeDataString("hello");
        postData += "&thing2=" + Uri.EscapeDataString("world");
    var data = Encoding.ASCII.GetBytes(postData);
    
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = data.Length;
    
    using (var stream = request.GetRequestStream())
    {
        stream.Write(data, 0, data.Length);
    }
    
    var response = (HttpWebResponse)request.GetResponse();
    
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    
    
  • GET

    var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
    
    var response = (HttpWebResponse)request.GetResponse();
    
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    
    

方法D.ウェブクライアント(新規制作にはお勧めしません)

このラッパーは HttpWebRequest . と比較 HttpClient .

で利用可能です。 .NET Framework 1.1+ , NET Standard 2.0+ , .NET Core 2.0+

using System.Net;
using System.Collections.Specialized;


  • POST

    using (var client = new WebClient())
    {
        var values = new NameValueCollection();
        values["thing1"] = "hello";
        values["thing2"] = "world";
    
        var response = client.UploadValues("http://www.example.com/recepticle.aspx", values);
    
        var responseString = Encoding.Default.GetString(response);
    }
    
    
  • GET

    using (var client = new WebClient())
    {
        var responseString = client.DownloadString("http://www.example.com/recepticle.aspx");
    }