首页 > 解决方案 > 在 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 项目中工作的正确解决方案?

如果JsonPatchDocumentBlazor 不支持,我该如何实现 HTTP 补丁请求?

标签: asp.net-coreblazor

解决方案


我只是有一个不同但相关的问题。您是正确的,您需要使用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);
 }

我知道它已经晚了,但我希望它会有所帮助。


推荐阅读