欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在ASP.NET Core中用HttpClient發(fā)送POST, PUT和DELETE請求

 更新時間:2021年03月11日 11:05:50   作者:碼農(nóng)譯站  
這篇文章主要介紹了在ASP.NET Core中用HttpClient發(fā)送POST, PUT和DELETE請求的方法,幫助大家更好的理解和學(xué)習(xí)使用ASP.NET Core,感興趣的朋友可以了解下

上一篇文章中,我們已經(jīng)學(xué)習(xí)了如何在ASP.NET Core中使用HttpClient從Web API獲取數(shù)據(jù)。此外,我們還學(xué)習(xí)了如何使用GetAsync方法和HttpRequestMessage類發(fā)送GET請求。在本文中,我們將學(xué)習(xí)如何在ASP.NET Core中使用HttpClient發(fā)送POST、PUT和DELETE請求,并使用PostAsync、PutAsync、DeleteAsync和HttpRequestMessage類創(chuàng)建請求。

在ASP.NET Core中使用HttpClient發(fā)送POST請求

如果讀過上一篇文章,就知道在CompanyEmployees.Client中有一個HttpClientCrudService 類。這個類已經(jīng)包含了兩個方法,我們將在本文中對它進行擴展。

既然配置已經(jīng)準備好了,我們可以添加一個新方法來發(fā)送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);
}

我們首先準備一個想要創(chuàng)建的company對象,并使用serialize方法對其進行序列化。然后,創(chuàng)建一個新的StringContent對象,提供序列化所需的數(shù)據(jù)及參數(shù)。之后,我們使用PostAsync方法將POST請求發(fā)送到API。在收到響應(yīng)之后,我們檢查它是否成功。然后,通過使用ReadAsStringAsync方法讀取內(nèi)容并使用JsonSerializerOptions參數(shù)對內(nèi)容進行反序列化(來自上一篇文章)。請記住我們在上一篇文章中創(chuàng)建的_options參數(shù)。

此時,我們必須確??蛻舳藨?yīng)用程序調(diào)用這個方法。然后修改Execute方法:

public async Task Execute()
{
 //await GetCompanies();
 //await GetCompaniesWithXMLHeader();
 await CreateCompany();
}

現(xiàn)在,如果我們在CreateCompany方法中放置一個斷點,并啟動兩個應(yīng)用程序:

我們可以看到結(jié)果。如果你愿意,還也可以查一下數(shù)據(jù)庫。

使用HttpRequestMessage發(fā)送POST請求

PostAsync方法是一個快捷方法,因為它封裝了HttpRequestMessage類。正如我們所見,它非常好用。但是,如果我們想對請求有更大的控制,并顯式地設(shè)置不同的請求選項,如header,我們必須使用HttpRequestMessage類。那么,讓我們看看如何做到這一點:​​​​​​​

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);
}

同樣,我們從創(chuàng)建companyForCreation對象及其序列化開始。然后,我們在創(chuàng)建一個HttpRequestMessage對象,并提供請求類型和地址。在此之后,我們添加一個accept頭,以確定我們支持哪種格式作為響應(yīng)。緊接著,我們使用StringContent類并提供序列化數(shù)據(jù)對象和編碼類型來填充請求。同樣,我們用ContentType屬性指定請求的媒體類型。

我們也可以在StringContent類的構(gòu)造函數(shù)中配置ContentType,但是有了這個實現(xiàn),就更容易理解過程。

為了發(fā)送請求,我們使用SendAsync方法。在確定返回成功的狀態(tài)碼之后,我們讀取內(nèi)容并反序列化它。

現(xiàn)在,我們可以修改Execute方法:​​​​​​​

public async Task Execute()
{
 //await GetCompanies();
 //await GetCompaniesWithXMLHeader();
 //await CreateCompany();
 await CreateCompanyWithHttpRequestMessage();
}

在我們的新方法中放置一個斷點,然后啟動我們的客戶端應(yīng)用:

可以看到,數(shù)據(jù)成功創(chuàng)建了。同樣,如果檢查響應(yīng),我們會發(fā)現(xiàn)201:

在ASP.NET Core中使用HttpClient發(fā)送一個PUT請求

就像處理POST請求一樣,我們將首先使用快捷方法,然后展示如何使用HttpRequestMessage類做同樣的事情。

在修改客戶端項目之前,我們只想提一下,Web API的UpdateCompany操作返回了一個NoContent響應(yīng)。因此,在客戶端上不需要反序列化任何內(nèi)容,只有一個204狀態(tài)碼。

也就是說,我們已經(jīng)準備好在HttpClientCrudService 類中添加一個新方法:​​​​​​​

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();
}

在這個方法中,我們創(chuàng)建一個新的updatedCompany對象,該對象具有修改后的Address屬性。然后,就像我們在CreateCompany方法中所做的那樣,序列化對象并創(chuàng)建一個新的StringContent。在此之后,我們在控制器創(chuàng)建更新數(shù)據(jù)的action。一旦這樣做了,我們將使用PutAsync快捷方法發(fā)送PUT請求,并確保接收到一個成功的狀態(tài)碼。在本例中是204 - NoContent狀態(tài)碼。

有了這些,我們可以修改Execute方法:​​​​​​​

public async Task Execute()
{
 ...
 await UpdateCompany();
}

現(xiàn)在,讓我們在UpdateCompany方法中放置一個斷點,并啟動應(yīng)用程序:

同樣,如果我們檢查我們的數(shù)據(jù)庫:

現(xiàn)在可以確認我們數(shù)據(jù)更新成功了。

使用HttpRequestMessage類發(fā)送PUT請求

正如我們已經(jīng)說過的,使用HttpRequestMessage類可以讓我們更好地控制請求。所以,讓我們看看如何利用它來發(fā)送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();
}

當我們查看這個方法時,可以看到它的實現(xiàn)與CreateCompanyWithHttpRequestMessage方法幾乎相同。當然,這里我們創(chuàng)建了一個額外的uri參數(shù),并且我們沒有反序列化響應(yīng)正文內(nèi)容,因為它是空的。

在方法實現(xiàn)之后,讓我們從Execute方法中調(diào)用它:​​​​​​​

public async Task Execute()
{
 ...
 await UpdateCompanyWithHttpRequestMessage();
}

讓我們啟動應(yīng)用程序:

成功了。如果不放心也可以檢查一下數(shù)據(jù)庫。

使用HttpClient發(fā)送DELETE請求

由于DELETE請求是前面所有請求中最簡單的,所以我們只展示代碼。所以,讓我們首先看看如何發(fā)送一個帶有快捷方式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方法中調(diào)用這個方法:​​​​​​​

public async Task Execute()
{
 ...
 await DeleteCompany();
}

一旦我們運行客戶端應(yīng)用程序,我們就會得到204響應(yīng)。這是Web API中DELETE操作的有效響應(yīng)。

現(xiàn)在,讓我們看看如何使用HttpRequestMessage類來做同樣的事情:​​​​​​​

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();
}

也沒什么新鮮的。我們?nèi)匀辉谡埱笾刑砑觓ccept頭。然后,我們必須在客戶端反序列化這些內(nèi)容。我們可以從Execute方法中調(diào)用這個方法并運行應(yīng)用程序,應(yīng)該會收到204狀態(tài)碼。

結(jié)論

因此,在本文中,我們學(xué)習(xí)了如何使用快捷方法和HttpRequestMessage類從客戶端應(yīng)用程序發(fā)送POST、PUT和DELETE請求。結(jié)合我們從上一篇文章中獲得的知識,我們已經(jīng)使用HttpClient類覆蓋了所有的CRUD方法。

在下一篇文章中,我們將更多地了解PATCH請求以及如何使用HttpClient發(fā)送它。

原文鏈接:https://code-maze.com/httpclient-example-aspnet-core-post-put-delete/

以上就是在ASP.NET Core中用HttpClient發(fā)送POST, PUT和DELETE請求的詳細內(nèi)容,更多關(guān)于ASP.NET Core中應(yīng)用HttpClient的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論