1
resposta

-- Erro no bloco HttpPatch --

Prezado(s), bom dia !

Ao criar o bloco AtualizaFilmeParcial, a palavra "patcH" da linha a seguir "patch.ApplyTo(filmeParaAtualizar, ModelState)" exibe o erro, conforme descrito abaixo:

***"Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão Erro CS1929 "JsonPatchDocument" não contém uma definição para "ApplyTo" e a melhor sobrecarga do método de extensão "JsonPatchExtensions.ApplyTo(JsonPatchDocument, UpdateFilmeDto, ModelStateDictionary)" requer um receptor do tipo "JsonPatchDocument" FilmesApi C:\Alura\FilmesApi\FilmesApi\Controllers\FilmeController.cs 82 Ativo"


Segue abaixo o bloco implementado !

[HttpPatch("{id}")] public IActionResult AtualizaFilmeParcial(int id, JsonPatchDocument patch) {

    var filme = _context.Filmes.FirstOrDefault(filme => filme.Id == id);

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

    var filmeParaAtualizar = _mapper.Map<UpdateFilmeDto>(filme);

    patch.ApplyTo(filmeParaAtualizar, ModelState);

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

    _mapper.Map(filmeParaAtualizar, filme);
    _context.SaveChanges();

    return NoContent();

}

Aguardo retorno !

Att,

Leonardo Dias Pinto

1 resposta

Olá, Leonardo! Como vai?

Pelo que você descreveu, parece que o erro está acontecendo porque o método ApplyTo não está conseguindo lidar com o objeto filmeParaAtualizar do tipo UpdateFilmeDto.

A mensagem de erro sugere que o método ApplyTo está esperando um objeto do tipo JsonPatchDocument<UpdateFilmeDto>, mas está recebendo um objeto do tipo UpdateFilmeDto.

Vamos tentar resolver isso. Primeiro, precisamos garantir que o objeto patch seja do tipo JsonPatchDocument<UpdateFilmeDto>, o que parece estar correto no seu código.

Em seguida, o método ApplyTo deve ser aplicado a um objeto do tipo UpdateFilmeDto, que é o caso do filmeParaAtualizar no seu código.

O problema pode estar na maneira como você está mapeando o objeto filme para filmeParaAtualizar. Certifique-se de que o mapeamento está sendo feito corretamente.

No exemplo da aula, o mapeamento é feito da seguinte maneira:

var filmeParaAtualizar = _mapper.Map<UpdateFilmeDto>(filme);

E em seguida, o método ApplyTo é chamado:

patch.ApplyTo(filmeParaAtualizar, ModelState);

Se o seu código está exatamente dessa forma, o erro pode estar em outra parte do código. Você poderia verificar se o mapeamento está configurado corretamente no FilmeProfile.cs?

Ele deve estar assim:

public FilmeProfile()
{
    CreateMap<CreateFilmeDto, Filme>();
    CreateMap<UpdateFilmeDto, Filme>();
    CreateMap<Filme, UpdateFilmeDto>();
}

Isso garante que o AutoMapper saiba como mapear um Filme para um UpdateFilmeDto.

Espero ter ajudado e bons estudos!