JsonPatchDocument является нулевым после перехода на .Net Core 3 - PullRequest
0 голосов
/ 24 октября 2019

У меня есть AspNetCore-WebApi-Project с несколькими операциями исправления, которые отлично работали с Core 2.2. После перехода на Core 3 значение [FromBody] JsonPatchDocument<T> будет нулевым. Мои Get / Post-методы все еще работают как положено.

Это одна часть моего запуска:

    services.AddDbContext<MyContext>(options => options
                    .UseLazyLoadingProxies()
                    .UseNpgsql(Configuration.GetConnectionString("MyConnectionString"), 
                        opt => opt.UseNodaTime()));

    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "My-API", Version = "v1" });
    });
    services.AddControllers()
        .AddNewtonsoftJson();

Это мое действие:

[HttpPatch("{id}")]
public async Task<IActionResult> Patch(Guid id, 
                            [FromBody] JsonPatchDocument<MyViewModel> patchDocument)
{
    await this.service.HandlePatchAsync(id, patchDocument);
    return NoContent();
}

Этоэто содержание тела:

[   
    {
        "op": "replace",
        "path": "/name",
        "value": "New Name" 
    },
    {
        "op": "replace",
        "path": "/country",
        "value": "Germany" 
    }
]

У кого-нибудь есть идеи, что здесь не так?

1 Ответ

2 голосов
/ 25 октября 2019

Я борюсь с подобной проблемой. Я собирался вообще избавиться от Newtonsoft, но в этом случае патч с JsonPatchDocument не работал.

В соответствии с https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio#jsonnet-support необходимо:

  1. Добавить ссылку на пакет в Microsoft.AspNetCore.Mvc.NewtonsoftJson

  2. Изменитькод в автозагрузке, добавляющий MVC в services.AddMvc().AddNewtonsoftJson();

Вы сделали второй шаг, но как насчет первого? Это помогло мне.

К сожалению, я не знаю, как заставить JsonPatchDocument работать без .AddNewtonsoftJson()

...