ASP.NET Core 中是否有 PostAsJsonAsync() 方法?
咨詢區(qū)
LP13
在 Asp.NET 中我一般都用 PostAsJsonAsync() 做數(shù)據(jù)提交,在 Asp.NET Core 時(shí)代我貌似沒有找到,按照程序集的命名規(guī)范,我覺得應(yīng)該也是由 Microsoft.AspNet.WebApi.Client 遷移到 Microsoft.AspNetCore.WebApi.Client 中。
回答區(qū)
Jeremy Caney
從 .NET 5.0 開始,你說的這個(gè)方法被引入到了 HttpClient 中,你可以引入 System.Net.Http.Json 命名空間,可以參考微軟的官方文檔:https://docs.microsoft.com/en-us/dotnet/api/system.net.http.json.httpclientjsonextensions.postasjsonasync?view=net-5.0 ?參考如下代碼:
using?System.Net.Http;??????????//HttpClient,?HttpResponseMessage using?System.Net.Http.Json;?????//HttpClientJsonExtensions using?System.Threading;?????????//CancellationToken using?System.Threading.Tasks;???//Tasknamespace?ConsoleApp2 {class?Program{static?void?Main(string[]?args){var?httpClient?=?new?HttpClient();var?url?=?"https://StackOverflow.com";var?data?=?new?MyDto();var?source?=?new?CancellationTokenSource();var?response?=?await?httpClient.PostAsJsonAsync<MyDto>(url,?data,?source.Token);}} }j.ghadiri
之所以沒有是因?yàn)?*AsJsonAsync() 系列方法本身就不是 ASP.NET Core 項(xiàng)目的一部分,不過你可以在 ASP.NET Core 中擴(kuò)展一個(gè) PostAsJsonAsync 方法即可 ,參考如下代碼:
using?System.Net.Http; using?System.Net.Http.Headers; using?System.Threading.Tasks; using?Newtonsoft.Json;public?static?class?HttpClientExtensions {public?static?Task<HttpResponseMessage>?PostAsJsonAsync<T>(this?HttpClient?httpClient,?string?url,?T?data){var?dataAsString?=?JsonConvert.SerializeObject(data);var?content?=?new?StringContent(dataAsString);content.Headers.ContentType?=?new?MediaTypeHeaderValue("application/json");return?httpClient.PostAsync(url,?content);}public?static?Task<HttpResponseMessage>?PutAsJsonAsync<T>(this?HttpClient?httpClient,?string?url,?T?data){var?dataAsString?=?JsonConvert.SerializeObject(data);var?content?=?new?StringContent(dataAsString);content.Headers.ContentType?=?new?MediaTypeHeaderValue("application/json");return?httpClient.PutAsync(url,?content);}public?static?async?Task<T>?ReadAsJsonAsync<T>(this?HttpContent?content){var?dataAsString?=?await?content.ReadAsStringAsync().ConfigureAwait(false);return?JsonConvert.DeserializeObject<T>(dataAsString);} }f.capet
既然是異步的 post json ,其實(shí)你可以用 HttpClient 中現(xiàn)存的 PostAsync() 方法做個(gè)周轉(zhuǎn)就好了,data 數(shù)據(jù)可以用 JsonConvert.SerializeObject 序列化,參考如下代碼:
public?static?async?Task<HttpResponseMessage>?PostAsJsonAsync<T>(this?HttpClient?httpClient,?string?url,?T?data) {var?dataAsString?=?JsonConvert.SerializeObject(data);var?content?=?new?StringContent(dataAsString);content.Headers.ContentType?=?new?MediaTypeHeaderValue("application/json");return?await?httpClient.PostAsync(url,?content); }點(diǎn)評區(qū)
確實(shí)現(xiàn)如今都被 HttpClient 所替代,而且這個(gè)類還是內(nèi)置的,不需要引用任何 Nuget 包,太方便了。
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core 中是否有 PostAsJsonAsync() 方法?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在单个测试中同时执行多个断言
- 下一篇: 微信发力了,一键部署网站后端!