0

Bom dia! Estou construindo um sistema utilizando C# como back e React no front, e estou com um problema em duas controllers (supostamente), mas o erro parece ser o mesmo, sendo que sempre que faço uma requisição AJAX com o method do tipo PUT, obtenho o erro

PUT http://localhost:49232/api/Product/1025 405 (Method Not Allowed)

Seguido por

{Message: "The requested resource does not support http method 'PUT'."}

Li sobre CORS, fiz os ajustes recomendados em vários tópicos, mas o erro permanece. Segue o código :

$.ajax({ url: URL,//A URL é montada acima, e para teste seu valor é http://localhost:49232/api/Products/1025 contentType: 'application/json', dataType: 'JSON', data: { "product": json}, //Aqui passo o objeto montado type: 'PUT', beforeSend: function () { }, success: function (response) { // do something }.bind(this), error: function (response) { // do something else } }); 

Action C#:

[ResponseType(typeof(void))] public async Task<IHttpActionResult> PutProduct(int id, Product product) { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (id != product.IdProduct) { return BadRequest(); } db.Entry(product).State = EntityState.Modified; try { await db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ProductExists(id)) { return NotFound(); } else { throw; } } return StatusCode(HttpStatusCode.NoContent); } 

Se puderem me ajudar, gratidão.

2
  • Adicione: [HttpPut], depois do '[ResponseType(typeof(void))]'. Commented 26/11/2018 às 12:54
  • @ViníciusMatos Fiz isso, mas não funcionou. Commented 26/11/2018 às 12:57

2 Respostas 2

3

Ricardo, a sua URL está conseguindo ser resolvida? Não fiz um teste de mesa aqui mas seu exemplo usa a URL

http://localhost:49232/api/Products/1025

E seu método está aguardando dois argumentos(um inteiro e um objeto) e tem como nome PutProduct e não Products.

2
  • Angelo, obrigado pela contribuição. A URL está sendo resolvida sim. Na verdade eu já "resolvi" o problema - Não foi uma solução de fato, mas funcionou - simplesmente excluindo a controller e recriando a mesma. Não sei o que havia de errado, mas agora funciona. Commented 26/11/2018 às 13:21
  • Imagina! Esse pode ser um bug de referência ou uma letra que você não estava vendo que estava errada (acontece muito comigo rs). Commented 26/11/2018 às 13:25
0

Se o seu aplicativo estiver sendo hospedado no IIS, executando a API no ASP.NET Core, inclua esta linha no arquivo Web.Config

<configuration> <system.webServer> <modules> <remove name="WebDAVModule" /> </modules> </system.webServer> </configuration> 

Você deve fazer log-in para responder a esta pergunta.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.