API Web ASP.NET – Ajax PUT – Méthode 405 non autorisée (Entity Framework)

J’essaie de mettre une mise à jour à un utilisateur utilisant l’API Web JSON vers ASP.NET via la fonction Ajax de JQuery. Je continue à recevoir une réponse 405 (Method not Allowed) du serveur. J’ai essayé à peu près tout, y compris la désactivation du module WebDAV dans web.config et l’ajout Access-Control-Allow-Origin têtes Access-Control-Allow-Origin à mon web.config.

J’ai utilisé l’approche basée sur la firebase database en utilisant ADO Model et la génération DbContext. Les contrôleurs ont également été générés par ASP.NET lors de leur création. Je suppose qu’ils devraient fonctionner.

J’ai essayé à la fois PUT et POST en vain. Je n’ai aucune idée de ce que je fais mal.

Mon code JS:

 function UpdateUserLoginTime(user) { $.getScript("src/js/datetimeutils.js"); var url = "http://foo.bar.com:8081/api/user/".concat(user.ID); var current = CurrentDateTime(); $.ajax({ url: url, type: 'PUT', data: JSON.ssortingngify({"LastLoginDate" : current}), datatype: "json", contentType: "application/json; charset=utf-8", crossDomain: true, success: function (data) { alert('User login time updated sucessfully'); }, error: function () { alert('Update login time error'); } }); } 

Pour le poste, j’ai aussi essayé JSON.ssortingngify (utilisateur) (sans concat (ID) sur l’URL).

Voici mon code de contrôleur ASP.NET:

  // PUT api/User/5 public HttpResponseMessage PutUser(ssortingng id, User user) { if (ModelState.IsValid && id == user.ID) { db.Entry(user).State = EntityState.Modified; try { db.SaveChanges(); } catch (DbUpdateConcurrencyException) { return Request.CreateResponse(HttpStatusCode.NotFound); } return Request.CreateResponse(HttpStatusCode.OK); } else { return Request.CreateResponse(HttpStatusCode.BadRequest); } } // POST api/User public HttpResponseMessage PostUser(User user) { if (ModelState.IsValid) { db.Users.Add(user); db.SaveChanges(); HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, user); response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = user.CAC })); return response; } else { return Request.CreateResponse(HttpStatusCode.BadRequest); } } 

Ma config:

                   

Mon RouteConfig:

  public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } } 

Vous devez activer CORS pour l’API Web, sinon, lorsque vous envoyez une demande, vous obtenez toujours une réponse non autorisée. Regarde ça .