JsonPatchDocument имеет значение null после перехода на .Net Core 3.

У меня есть проект 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" 
    }
]

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


person Joshit    schedule 24.10.2019    source источник
comment
Вы мигрировали с 2.2 на 3.0 в соответствии с официальная документация ? Я протестировал его, и он работал хорошо. Не могли бы вы поделиться демонстрацией, которая может воспроизвести проблему?   -  person Xueli Chen    schedule 25.10.2019
comment
Я не получил правильный пакет. Мне было непонятно, что я установил новый пакет, кроме вызова AddNewtonsoftJson(). в запуске. Но все равно спасибо, что посмотрели!   -  person Joshit    schedule 25.10.2019


Ответы (1)


Борюсь с похожей проблемой. Я вообще собирался избавиться от 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()

person Peter Vdovukhin    schedule 25.10.2019
comment
Большое спасибо! Установка пакета решила мою проблему - person Joshit; 25.10.2019
comment
Не будет возможности избавиться от newtonsoft, потому что JsonPatchDocument внутренне полагается на newtonsoft. Возможно, они также заменят этот пакет в будущих выпусках. - person Joshit; 25.10.2019
comment
Спасибо, это решило мою проблему с [FromBody] в пост-действии, установив для модели значение null. После установки пакета все работает отлично. - person loan.burger; 28.11.2019