Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Método PATCH não funciona (Resolvido)

RESOLVI O PROBLEMA, ERA UMA LINHA DE CODIGO Q EU ESQUECI DE ADD NO PROGRAM.CS

os meus códigos: controller:

    ```
    public IActionResult PatchProduto(int id, JsonPatchDocument<UpdateProdutoDto> patch)
    {

        var produto = _context.Produtos.FirstOrDefault(produto => produto.Id == id);

        if (produto == null) return NotFound();

        var produtoParaAtualizar = _mapper.Map<UpdateProdutoDto>(produto);

        patch.ApplyTo(produtoParaAtualizar, ModelState);

        if (!TryValidateModel(produtoParaAtualizar))
        {
            return ValidationProblem(ModelState);
        }

        _mapper.Map(produtoParaAtualizar, produto);
        _context.SaveChanges();

        return Ok(produto);
    }
    ```
    

Profile:

public ProdutoProfile()
{
    CreateMap<CreateProdutoDto, Produto>();
    CreateMap<UpdateProdutoDto, Produto>();
    CreateMap<Produto, UpdateProdutoDto>();
    CreateMap<Produto, ReadProdutoDto>();
}

UpdateProdutoDto:

[Key]
public int Id { get; set; }

public string Nome { get; set; }

public string Sku { get; set; }

public string Descricao { get; set; }

public decimal Precovenda { get; set; }

public decimal Precocompra { get; set; }

public double Quantidadealertar { get; set; }

public string Unidademedida { get; set; }

eu mando a requisiçao pelo postman assim:

[ { "op": "replace", "path": "/descricao", "value": "Um produto do novo" } ]

e a resposta é essa:

{ "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1", "title": "One or more validation errors occurred.", "status": 400, "errors": { "$": [ "The JSON value could not be converted to Microsoft.AspNetCore.JsonPatch.JsonPatchDocument`1[API_Inventorysystem.Data.Dtos.Produtos.UpdateProdutoDto]. Path: $ | LineNumber: 0 | BytePositionInLine: 1." ], "patch": [ "The patch field is required." ] }, "traceId": "00-71dd2e6ab9c080cdd74704a1f85213d7-678cbff915beeb72-00" }

mesmo se eu mandar a requicisão sem os "[]", ainda n atualiza o produto.

1 resposta
solução!

Oi Guilherme, bom dia.

Que bom que você conseguiu resolver o problema! Às vezes, pequenos detalhes como uma linha de código esquecida podem causar grandes dores de cabeça, não é mesmo?

Pelo que você descreveu, parece que o problema estava relacionado à configuração do Program.cs. É importante garantir que o NewtonsoftJson esteja devidamente configurado. Isso é feito adicionando AddNewtonsoftJson() ao configurar os serviços no Program.cs, como mostrado no exemplo da aula:

builder.Services.AddControllers().AddNewtonsoftJson();

Essa linha é essencial para que o método PATCH funcione corretamente, pois o JsonPatchDocument depende do Newtonsoft para processar as operações de patch.

Além disso, quando você faz a requisição pelo Postman, é importante garantir que o corpo da requisição esteja no formato correto. No seu caso, parece que você já ajustou isso, mas é sempre bom verificar se o JSON está bem formatado e se as operações estão corretas.

Espero ter ajudado e bons estudos!