405方法不允许Web API 2

我已经浏览了几乎所有我能找到的文章,SO等等。 我已经对Web.config进行了更改以满足答案,因为它们似乎都指向删除WebDAV模块和处理程序。

但是,我仍然收到错误:

405方法不允许

请求的资源不支持http方法’PUT’。

注意:这最初只是一个MVC 4项目。 我添加了工件来支持Web API。 好像我可能错过了一些东西。

注意: GET调用在Angular中运行得很好。

Web API路由配置

 configuration.Routes.MapHttpRoute( name: "Default API", routeTemplate: "api/{controller}/{id}", defaults: new { action = "Get", id = RouteParameter.Optional }, constraints: new { id = @"[\da-z-]{36}" }); configuration.Routes.MapHttpRoute( name: "Default API with Action", routeTemplate: "api/{controller}/{action}", defaults: new { action = "Get" }); var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter; formatter.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(); 

Web.config文件

             

PUT API条目

 public async Task Put([FromBody] EditUserViewModel viewModel) 

客户端

 vm.model.$update(function () { $state.go(userStates.app); }); 

是否有可能陷入第二种路线配置? 如果是这样,我如何validation.NET尝试使用的路由配置?

最后,似乎是我试图使路由表复杂化。 我最终还是回到了这个:

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

请注意我添加了configuration.MapHttpAttributeRoutes(); 同样。

在这两个变化之后,一切都运转良好,信不信由你。 Web.config看起来像这样:

     

我也在努力解决这个问题,并发现我必须多做一点。 尝试一下: