ASP.NET Web API – Ajax PUT – 405不允许的方法(entity framework)

我试图通过JQuery的Ajax函数向使用JSON到ASP.NET Web API的用户进行更新。 我一直从服务器获得405 (Method not Allowed)响应。 我已经尝试过几乎所有的东西,包括在web.config中禁用WebDAV模块,以及向我的web.config添加Access-Control-Allow-Origin标头。

我使用ADO模型和DbContext生成的数据库优先方法。 控制器也是由ASP.NET在创建时生成的。 我认为他们应该工作。

我试过PUT和POST都无济于事。 我不知道我做错了什么。

我的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.stringify({"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'); } }); } 

对于post,我也尝试了JSON.stringify(用户)(在url上没有concat(ID))。

这是我的ASP.NET控制器代码:

  // PUT api/User/5 public HttpResponseMessage PutUser(string 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); } } 

我的配置:

                   

我的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 } ); } } 

您需要为web api启用CORS,否则在发送请求时,您总是得到响应405不允许。 看这个 。