.NETでHTTP POSTリクエストを送信する 質問する

.NETでHTTP POSTリクエストを送信する 質問する

HTTPを作成するにはどうすればいいですか?役職本文でデータを要求して送信しますか?

ベストアンサー1

HTTPを実行する方法はいくつかある得るそして役職リクエスト:


方法 A: HttpClient (推奨)

利用可能なバージョン: .NET Framework 4.5 以降、.NET Standard 1.1 以降、および .NET Core 1.0 以降。

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

using System.Net.Http;

設定

それをお勧めしますHttpClient特別な理由がない限り、アプリケーションの存続期間中にインスタンスを 1 つ作成し、共有します。

private static readonly HttpClient client = new HttpClient();

見るHttpClientFactoryのために依存性注入解決。


  • 役職

      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();
    
  • 得る

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

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

レストシャープ

  • 役職

       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;

  • 役職

      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

  • 役職

      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();
    
  • 得る

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

方法 D: WebClient (新規作業には推奨されません)

これは のラッパーですHttpWebRequestと比べてHttpClient

利用可能なバージョン: .NET Framework 1.1+、NET Standard 2.0+、.NET Core 2.0+。

状況によっては (.NET Framework 4.5 ~ 4.8)、HTTP 要求を同期的に実行する必要がある場合でも、WebClient引き続き使用できます。

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

  • 役職

      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);
      }
    
  • 得る

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

おすすめ記事