承德网站建设怎么做,做资金盘 互助盘的网站,做模版网站需要租服务器吗,wordpress 对话使用 System.Net.Http.Json 简化 HttpClient 的使用Intro从 .NET Core 3.1 开始#xff0c;微软添加了一个 System.Net.Http.Json 的扩展#xff0c;可以用来简化 HttpClient 的使用#xff0c;看到在很多项目里还并未开始使用#xff0c;所以想向大家介绍一下SamplePostAs… 使用 System.Net.Http.Json 简化 HttpClient 的使用Intro从 .NET Core 3.1 开始微软添加了一个 System.Net.Http.Json 的扩展可以用来简化 HttpClient 的使用看到在很多项目里还并未开始使用所以想向大家介绍一下SamplePostAsJson/PutAsJsonPostAsJson sampleconst string url http://localhost:5000/api/values;
using var httpClient new HttpClient();using var response await httpClient.PostAsJsonAsync(url, new Category()
{Id 1,Name Test
});
response.EnsureSuccessStatusCode();PutAsJson:using var response await httpClient.PutAsJsonAsync(url, new Category()
{Id 1,Name Test
});
response.EnsureSuccessStatusCode();简单来说就是会把一个对象变成 JSON request body目前支持 Post 和 Put 方法 默认的序列化方式和 ASP.NET Core 是一致的会变成 camalCase, 例如如果要自定义序列化可以传入一个 JsonSerializerOptions如using var response await httpClient.PostAsJsonAsync(url, new Category()
{Id 1,Name Test
}, new JsonSerializerOptions());
response.EnsureSuccessStatusCode();可以看到这个例子中的 body 和之前有所不同了这正是因为我们使用了自定义的 JsonSerializerOptionsGetFromJsonAsyncvar result await httpClient.GetFromJsonAsyncResultModel(url);
ArgumentNullException.ThrowIfNull(result);
Console.WriteLine(${result.Status}: {result.ErrorMsg});和上面的 AsJson 相对应这个是从 Response body 到一个对象同样地也支持自定义 JsonSerializerOptions可以自己尝试一下ReadFromJsonAsyncusing var response await httpClient.PutAsJsonAsync(url, new Category()
{Id 1,Name Test
});
response.EnsureSuccessStatusCode();
var result await response.Content.ReadFromJsonAsyncResultModel();
ArgumentNullException.ThrowIfNull(result);
Console.WriteLine(${result.Status}: {result.ErrorMsg});直接从 HttpContent 中读取 json 对象JsonContent.Createusing var content JsonContent.Create(new Category() { Id 1, Name Test });
using var response await httpClient.PostAsync(url, content);
response.EnsureSuccessStatusCode();从一个对象构建 HttpContent 同样支持自定义序列化MoreSample使用前后的一些对比MoreJSON现在已经非常的普遍了这一扩展可以使得 HttpClient 处理 JSON 更为简单而且从 .NET 6 开始已经包含在了框架中不需要再手动引用 nuget 包了在 .NET 7 中会增加一个 PatchAsJsonAsync 的扩展方法目前发布的 Preview 1 已经可用使用方法类似于 PostAsJsonAsync/PutAsJsonAsyncHttpMethod 是 Patch另外觉得应该有一个类似于 GetFromJsonAsync 的 DeleteFromJsonAsync提了一个 issue感兴趣的可以关注一下https://github.com/dotnet/runtime/issues/65617如果返回的 response 状态码不是 2xxGetFromJsonAsync 会抛异常如果是不合法的 JSON 也会抛出异常Referenceshttps://github.com/dotnet/runtime/issues/65617https://github.com/dotnet/runtime/tree/main/src/libraries/System.Net.Http.Json/src/System/Net/Http/Jsonhttps://github.com/WeihanLi/SamplesInPractice/blob/master/HttpClientTest/JsonExtensionSample.cshttps://github.com/OpenReservation/ReservationServer/commit/d07f9dc5ae292dd748d7f7a879898009c198d70d