AS.NET CoreでPOST,PUT,DELETE要求をHttpClientで送信します。


前の記事では、ASP.NET CoreでHttpClientを使ってWeb APIからデータを取得する方法を学びました。さらに,GetArync法とHttpRequest Message類を用いてGET要求を送信する方法を学びました。本論文では、ASP.NET CoreでPOST、PUT、DELETE要求をどのようにHttpClientで送信するかを学び、PostAync、PutAync、DeleteAsync、HttpRequest Message類の作成要求を使用します。
AS.NET CoreではHttpClientを使ってPOST要求を送信します。
前の記事を読んだら、CompanyEmployes.lientの中にHttp Clint Cruderviceがあることが分かります。 クラスです。このクラスはすでに二つの方法を含んでいます。ここでそれを拡張します。
構成が準備されている以上、POST要求をWeb APIに送信するための新しい方法を追加することができる。

private async Task CreateCompany()
{
 var companyForCreation = new CompanyForCreationDto
 {
  Name = "Eagle IT Ltd.",
  Country = "USA",
  Address = "Eagle IT Street 289"
 };

 var company = JsonSerializer.Serialize(companyForCreation);

 var requestContent = new StringContent(company, Encoding.UTF8, "application/json");

 var response = await _httpClient.PostAsync("companies", requestContent);
 response.EnsureSuccessStatusCode();

 var content = await response.Content.ReadAsStringAsync();
 var createdCompany = JsonSerializer.Deserialize<CompanyDto>(content, _options);
}
まず作成したいcompanyオブジェクトを準備して、serialize方法を使ってそれを順番に並べます。その後、新たなStringContentオブジェクトを作成し、シーケンス化に必要なデータとパラメータを提供します。その後、PostAsync方法を使用して、POST要求をAPIに送信します。応答を受けた後、それが成功したかどうか確認します。そして、ReadAstringAync法を用いてコンテンツを読み取り、Json SerializerOptionsパラメータを用いてコンテンツを逆順序化する(前の記事から)。前の文章で作成した_を覚えてください。optionsパラメータ。
この場合、クライアントアプリケーションがこの方法を呼び出すことを確認しなければなりません。その後、Execute方法を変更します。

public async Task Execute()
{
 //await GetCompanies();
 //await GetCompaniesWithXMLHeader();
 await CreateCompany();
}
現在、CreateCompanyメソッドにブレークポイントを置くと、二つのアプリケーションが起動されます。

私たちは結果を見ることができます。よろしければ、データベースを調べてもいいです。
HttpRequest Messageを使ってPOST要求を送信します。
PostAsync方法はHttpRequest Messageクラスをカプセル化しているので、ショートカット方法です。私たちが見た通り、とても使いやすいです。しかし、もし私たちが要求に対してより大きなコントロールを持ちたいならば、headerなどの異なる要求オプションを明示的に設定して、HttpRequest Message類を使用しなければなりません。では、どうやってそれをできるかを見てみましょう。

private async Task CreateCompanyWithHttpRequestMessage()
{
 var companyForCreation = new CompanyForCreationDto
 {
  Name = "Hawk IT Ltd.",
  Country = "USA",
  Address = "Hawk IT Street 365"
 };

 var company = JsonSerializer.Serialize(companyForCreation);

 var request = new HttpRequestMessage(HttpMethod.Post, "companies");
 request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
 request.Content = new StringContent(company, Encoding.UTF8);
 request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

 var response = await _httpClient.SendAsync(request);
 response.EnsureSuccessStatusCode();

 var content = await response.Content.ReadAsStringAsync();
 var createdCompany = JsonSerializer.Deserialize<CompanyDto>(content, _options);
}
同様に、私たちはcompanyForCreationオブジェクトの作成とそのプロローグから開始します。その後、私たちはHttpRequest Messageオブジェクトを作成し、要求の種類と住所を提供します。その後、応答としてどのフォーマットをサポートするかを確認するためにacceptヘッダを追加します。続いて、要求を満たすために、StringConteentクラスを使用して、順序付けデータオブジェクトと符号化タイプを提供します。同様に、要求されたメディアタイプをContentType属性で指定します。
私たちはStringContent類のコンストラクターにコンテントTypeを配置することもできますが、この実現があると、プロセスが分かりやすくなります。
要求を送るためにSendAsync方法を使います。成功した状態コードを返したと判断した後、コンテンツを読み、それを逆順序に並べます。
今は、Executeの方法を変更できます。

public async Task Execute()
{
 //await GetCompanies();
 //await GetCompaniesWithXMLHeader();
 //await CreateCompany();
 await CreateCompanyWithHttpRequestMessage();
}
新しい方法でブレークポイントを置いて、クライアントアプリケーションを起動します。

データが作成されました。同様に、もし応答を確認したら、201:

AS.NET CoreでHttpClientを使ってPUT要求を送信します。
POST要求を処理するように、まずショートカットを使って、HttpRequest Message類を使って同じことをする方法を示します。
クライアント項目を修正する前に、ウェブAPIのUpdateCompany操作は一つのNoContent応答に戻りました。したがって、クライアント上では、任意のコンテンツを逆順序で並べ替える必要はなく、1つの204状態コードのみが存在する。
つまり、HttpClient Cruderviceを用意しました。 クラスに新しい方法を追加します。

private async Task UpdateCompany()
{
 var updatedCompany = new CompanyForUpdateDto
 {
  Name = "Eagle IT Ltd.",
  Country = "USA",
  Address = "Eagle IT Street 289 Updated"
 };

 var company = JsonSerializer.Serialize(updatedCompany);

 var requestContent = new StringContent(company, Encoding.UTF8, "application/json");

 var uri = Path.Combine("companies", "fc12c11e-33a3-45e2-f11e-08d8bdb38ded");
 var response = await _httpClient.PutAsync(uri, requestContent);
 response.EnsureSuccessStatusCode();
}
この方法では、オブジェクトは修正されたAddress属性を持つ新しいudatedCompanyオブジェクトを作成します。そして、我々がCreateCompany法で行ったように、プログレッシブオブジェクトを作成し、新たなStringContottを作成します。その後、私たちはコントローラでデータを更新するactionを作成します。このようにすれば、PutAryncショートカットを使ってPUT要求を送信し、成功した状態コードを受信することを確認します。本例では、204−NoContent状態コードである。
これらがあれば、Execute方法を変更できます。

public async Task Execute()
{
 ...
 await UpdateCompany();
}
今、UpdateCompanyメソッドにブレークポイントを置き、アプリケーションを起動します。

同じように、私達が私達のデータベースをチェックすると:

私たちのデータの更新が成功したことを確認できます。
PUT要求はHttpRequest Messageクラスを使用して送信されます。
既に述べたように、HttpRequest Message類を使用すると、要求をよりよくコントロールすることができます。ですから、どのようにPUT要求を送信するかを見てみましょう。

private async Task UpdateCompanyWithHttpRequestMessage()
{
 var updatedCompany = new CompanyForCreationDto
 {
  Name = "Hawk IT Ltd.",
  Country = "USA",
  Address = "Hawk IT Street 365 Updated"
 };

 var company = JsonSerializer.Serialize(updatedCompany);

 var uri = Path.Combine("companies", "29bc0429-eb4d-4eeb-f11d-08d8bdb38ded");
 var request = new HttpRequestMessage(HttpMethod.Put, uri);
 request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
 request.Content = new StringContent(company, Encoding.UTF8);
 request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

 var response = await _httpClient.SendAsync(request);
 response.EnsureSuccessStatusCode();
}
この方法を見ると、CreateCompany WithHttpRequest Message法とほぼ同じ実装が見られます。もちろん、ここでは付加的なuriパラメータを作成しました。本文の内容に対する逆順序化はありません。空ですから。
方法が実現された後、Execute方法からそれを呼び出させます。

public async Task Execute()
{
 ...
 await UpdateCompanyWithHttpRequestMessage();
}
アプリケーションを起動しましょう。

成功しました。不安ならデータベースをチェックしてもいいです。
Http Clientを使ってDELETE要求を送信します。
DELETE要求は前のすべての要求の中で最も簡単なものですので、コードのみを示します。まず、ショートカット方式のDeleteAsync方法を持つDELETE要求をどのように送るかを見てみましょう。

private async Task DeleteCompany()
{
 var uri = Path.Combine("companies", "fc12c11e-33a3-45e2-f11e-08d8bdb38ded");

 var response = await _httpClient.DeleteAsync(uri);
 response.EnsureSuccessStatusCode();
}
同様に、この方法をExecuteメソッドから呼び出しましょう。

public async Task Execute()
{
 ...
 await DeleteCompany();
}
クライアントアプリケーションを実行すると、204の応答が得られます。これはWeb APIにおけるDELETE動作の有効応答である。
今は、HttpRequest Message類を使って同じことをする方法を見てみましょう。

private async Task DeleteCompanyWithHttpResponseMessage()
{
 var uri = Path.Combine("companies", "29bc0429-eb4d-4eeb-f11d-08d8bdb38ded");
 var request = new HttpRequestMessage(HttpMethod.Delete, uri);
 request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

 var response = await _httpClient.SendAsync(request);
 response.EnsureSuccessStatusCode();
}
別に新鮮なものもないです。私たちはまだ要求にacceptヘッダを追加します。そして、これらのコンテンツはクライアントで逆順序に並べなければなりません。私たちはこの方法をExecuteメソッドから呼び出して、アプリケーションを実行して、204の状態コードを受信するはずです。
結論
したがって、本論文では、ショートカット方法とHttpRequest Message類を用いて、クライアントアプリケーションからPOST、PUT、DELETE要求を送信する方法を学びました。前の文章から得た知識を結び付けて、私達はすでにHttpClient類を使ってすべてのCRUD方法をカバーしました。
次の記事では、PATCH要求とどのようにHttpClientを使用して送信するかをより多く理解します。
リンク:https://code-maze.com/httpclient-example-aspnet-core-post-put-delete/
以上はASP.NET CoreでPOST、PUT、DELETE要求の詳細をHttpClientで送信します。ASP.NET CoreでHttpClientを適用する資料については他の関連記事に注目してください。