Estou recebendo o seguinte erro ao tentar atualizar:
405 Method Not Allowed
Use of the request method is not allowed on the resource.
Estou recebendo o seguinte erro ao tentar atualizar:
405 Method Not Allowed
Use of the request method is not allowed on the resource.
Willian, esse erro 405 ("Method Not Allowed") geralmente significa que a rota que você está tentando acessar existe, mas não aceita o método HTTP PUT.
Ve se sua rota aceita o método PUT
Confirme se você tem algo assim no seu código:
app.MapPut("/artistas/{id}", (int id, Artista artista) => {
// lógica de atualização
});
Se estiver usando controller:
[HttpPut("{id}")]
public IActionResult Atualizar(int id, [FromBody] Artista artista) {
// lógica
}
URL e método estão batendo?
Exemplo:
/artistas/{id}
/artistas/1
Se fizer PUT em um endpoint como /artistas
(sem {id}
), e ele só aceita com id, vai dar 405.
Você não está usando método errado no cliente
Se estiver usando Postman, curl, JavaScript ou outra linguagem, confirme que está mesmo usando o método PUT.
Outros problemas comuns
localhost:porta
certo)app.Run()
?app.UseRouting()
e app.UseEndpoints()
estão configurados corretamente? (se estiver usando controllers)Se puder, me manda o trecho de código onde define a rota PUT e como você está fazendo a requisição (ex: Postman, curl, JS). Com isso consigo te dar uma resposta mais precisa.
Estou com o mesmo problema...
Código:
app.MapPut("/artistas", ([FromServices] DAL<Artista> dal, [FromBody] Artista artista) =>
{
var artistaAtualizar = dal.GetBy(a => a.Id == artista.Id);
if (artistaAtualizar is null)
{
return Results.NotFound();
}
artistaAtualizar.Nome = artista.Nome;
artistaAtualizar.FotoPerfil = artista.FotoPerfil;
artistaAtualizar.Bio = artista.Bio;
dal.Update(artistaAtualizar);
return Results.Ok();
});
Requisição:
curl --location --request PUT 'https://localhost:7071/artistas' \
--header 'Content-Type: application/json' \
--data '{
"nome": "Luan Santana",
"fotoPerfil": "https://agenciaamapa.com.br/midias/2024/medias/up_ag_24060_ea0cfc30-e6e1-aafd-7e3d-402faf8bfc60.jpg",
"bio": "Luan Santana é um cantor e compositor brasileiro de música sertaneja.",
"id": 1
}'
Após mudar o método ele funcionando, acredito que seja o .NET obrigando a passar o ID no PUT...
Código atualizado:
app.MapPut("/artistas/{id}", ([FromServices] DAL<Artista> dal, [FromBody] Artista artista, string id) =>
{
var artistaAtualizar = dal.GetBy(a => a.Id == int.Parse(id));
if (artistaAtualizar is null)
{
return Results.NotFound();
}
artistaAtualizar.Nome = artista.Nome;
artistaAtualizar.FotoPerfil = artista.FotoPerfil;
artistaAtualizar.Bio = artista.Bio;
dal.Update(artistaAtualizar);
return Results.Ok();
});
Requisição:
curl --location --request PUT 'https://localhost:7071/artistas/1' \
--header 'Content-Type: application/json' \
--data '{
"nome": "Luan Santana",
"fotoPerfil": "https://agenciaamapa.com.br/midias/2024/medias/up_ag_24060_ea0cfc30-e6e1-aafd-7e3d-402faf8bfc60.jpg",
"bio": "Luan Santana é um cantor e compositor brasileiro de música sertaneja.",
"id": 1
}'
Eu fiz isso, dps voltei pro código anterior e ele passou também... n entendi nada, mas funcionou