asp.net-core - 在 Blazor 客户端中使用带有 PatchAsync 的 JsonPatchDocument
问题描述
在我的 Blazor 客户端项目中,我有以下代码:
@using Microsoft.AspNetCore.JsonPatch
...
var doc = new JsonPatchDocument<Movie>()
.Replace(o => o.Title, "New Title");
await Http.PatchAsync("api/patch/" + MovieId, doc);
这不会编译并出现以下错误:
错误 CS1503 参数 2:无法从“Microsoft.AspNetCore.JsonPatch.JsonPatchDocument”转换为“System.Net.Http.HttpContent”
经过一些研究,我已经安装了,Newtonsoft.Json
但我不确定如何配置项目以使用它,或者这是否确实是JsonPatchDocument
在 Blazor 项目中工作的正确解决方案?
如果JsonPatchDocument
Blazor 不支持,我该如何实现 HTTP 补丁请求?
解决方案
我只是有一个不同但相关的问题。您是正确的,您需要使用Newtonsoft.Json
而不是System.Text.Json
在客户端应用程序上。这是一个扩展方法,它将把你JsonPatchDocument
变成一个HttpContent
.
public static class HttpClientExtensions
{
public static async Task<HttpResponseMessage> PatchAsync<T>(this HttpClient client,
string requestUri,
JsonPatchDocument<T> patchDocument)
where T : class
{
var writer = new StringWriter();
var serializer = new JsonSerializer();
serializer.Serialize(writer, patchDocument);
var json = writer.ToString();
var content = new StringContent(json, Encoding.UTF8, "application/json-patch+json");
return await client.PatchAsync(requestUri, content);
}
我知道它已经晚了,但我希望它会有所帮助。
推荐阅读
- r - mdply(或类似)一个函数而不是 for 循环
- javascript - 如何在 React 的数组中更新对象中键的值?
- vb.net - 使用文本框从 datagridview 过滤名称和用户名
- c++ - 如何更正我的多项式 GCD 以获得两个高阶多项式之间的正确答案?(在 C 或 C++ 中)
- spring - 从数据库加载 Blob
- python - 熊猫数据框多个标准
- asp.net-core - 从 ASP.NET Core 2.2 迁移到 3.1 和错误 404
- docker - 将 docker 容器及其数据库容器移动到另一台服务器
- arrays - 如何在 Typescript 4.0.3 中正确扩展 Array 原型?
- html - 图片在桌面上加载,但在网站被推送到 github/netlify 时不会加载