2
respostas

Erro 405Method Not Allowed

Estou fazendo com outros modelos para ir treinando. No momento em que dou o send no postman apresenta esse erro de método nao permitido. E so acontece nesse metodo, os outros estão ok.

Body do postman:

{
  "nome": "Bolsa Collci",
  "categoria": "Bolsa",
  "preco": 10,
  "descricao" : "Bolsa de Camurça"
}

Metodo Update

    [HttpPut("{id}")]
    public IActionResult UpdateProduto(int id, [FromBody] UpdateProdutoDto produtoDto)
    {
        var produto = _context.Produtos.FirstOrDefault(p => p.Id.Equals(id));
        if (produto == null) return NotFound(); 
        _mapper.Map(produtoDto, produto);
        _context.SaveChanges();
        return NoContent();
    }
2 respostas

Olá, Leandro!

Este erro geralmente ocorre quando o servidor entende o método da requisição, mas o método não é suportado para o recurso solicitado. No seu caso, o servidor não está permitindo o método PUT para o recurso que você está tentando acessar.

A primeira coisa que eu verificaria é se a URL que você está usando no Postman está correta. O erro pode estar ocorrendo porque a URL que você está tentando acessar não existe ou não aceita o método PUT.

A URL deve ser algo como http://localhost:porta/api/produtos/{id}, onde {id} é o ID do produto que você deseja atualizar. Verifique se o ID do produto que você está tentando atualizar realmente existe no banco de dados.

Outra coisa que você pode verificar é se o seu método UpdateProduto está sendo chamado corretamente. Você pode fazer isso colocando um breakpoint no início do método e verificando se ele é atingido quando você faz a requisição PUT no Postman.

Seu código parece estar correto, mas é difícil dizer com certeza sem ver o resto do seu controlador e a configuração do seu servidor.

Aqui está um exemplo de como o seu método UpdateProduto poderia ser chamado:

[Route("api/[controller]")]
[ApiController]
public class ProdutosController : ControllerBase
{
    private readonly MeuContexto _context;
    private readonly IMapper _mapper;

    public ProdutosController(MeuContexto context, IMapper mapper)
    {
        _context = context;
        _mapper = mapper;
    }

    // Outros métodos...

    [HttpPut("{id}")]
    public IActionResult UpdateProduto(int id, [FromBody] UpdateProdutoDto produtoDto)
    {
        var produto = _context.Produtos.FirstOrDefault(p => p.Id == id);
        if (produto == null) return NotFound();
        _mapper.Map(produtoDto, produto);
        _context.SaveChanges();
        return NoContent();
    }
}

Espero que isso te ajude a encontrar a causa do problema. Se você ainda estiver tendo problemas, por favor, forneça mais detalhes sobre a configuração do seu servidor e o resto do seu controlador.

Espero ter ajudado e bons estudos!

Quando rodei a aplicação no modo de depuração ele funcionou legal, sem nenhuma alteração. Não sei se tem alguma relação ou diferença.