verbo usado servidor remoto página permitido para obtener not net método metodo method está esta error err_aborted detallado delete asp allowed acceso asp.net-mvc asp.net-web-api

asp.net mvc - usado - Mensaje 405, método no permitido con Web Api



put 405(method not allowed) (5)

Tengo lo siguiente en un controlador API:

public void UpdateClient(Client client) { try { if (ModelState.IsValid) { db.Entry(client).State = EntityState.Modified; db.SaveChanges(); } } catch { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); } }

Y lo siguiente en la página:

$.ajax({ url: "api/client/UpdateClient", type: "PUT", contentType: ''json'', data: ko.toJSON(model.selectedClient()), success: function (result) { getClients(); $("#loader").hide(); }, failure: function (result) { alert(result.d); $("#loader").hide(); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("An error occurred, please try again."); $("#loader").hide(); } });

Pero esto da el error 405 Método No Permitido, ¿alguien puede ver dónde me he equivocado? Como referencia, la URL de la API está bien, ya que uso el mismo controlador de API para otras funciones.

Además, el selectedClient () es un objeto Cliente recibido a través de WebApi, por lo que debe coincidir perfectamente con PUT up nuevamente.


¿Tiene el atributo [HttpPut] en su acción UpdateClient? Además, ¿tienes una ruta que toma la {acción} como la plantilla de ruta? Por ejemplo:

config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );

Una cosa más, intente ''application / json'' para el tipo de contenido en su código ajax en lugar de ''json''.


Mi problema era que, en las propiedades del proyecto, estaba usando Local IIS en lugar de IIS Express, y por defecto al puerto 80, que bloqueaba las solicitudes DELETE. Cambiar a IIS Express lo solucionó.


Nota para los futuros solucionadores de problemas: Recibí este error cuando mi controlador "Put" esperaba involuntariamente un parámetro adicional que no se estaba usando.


Parece que estas dos líneas estaban equivocadas, las cambié de la siguiente manera:

contentType: ''application/json'', data: "{client: " + ko.toJSON(model.selectedClient()) + "}",

Y ahora entra.