2016-11-04 81 views
0

我收到405找不到方法尝试在我的Web API控制器中使用$ http.put时发生错误。405方法不允许 - MVC项目中的Web API

我已经尝试了一切,我可以找到那里,主要是与WebDav。我有另一个Web API项目,我从来没有遇到过这个问题。以下是我在角度范围内的示例调用。这是疯狂的,我有一切基本相同的另一个Web API项目,似乎工作正常的网络配置。

return $http.put("/api/Account/PasswordChange",{params:{"currentPass":currentPass,"newPass":newPass,"confirmPass":confirmPass}}) 
         .then(function (response) { 
          return response.data; 
         }, 
          function (response) { 

           return $q.reject(response); 
          }); 

这里是我的网页API路由

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

,这里是网页API控制器被称为

public IHttpActionResult PutPasswordChange(string currentPass,string newPass,string confirmPass) 
    { 
     return Ok(); 
    } 
+0

有你设置一个断点在你的路线,看它是否被打? –

+0

什么都没有被打到,我回来的时候没有找到405的方法。如果我对同一个控制器发布不同的功能,它可以正常工作....它只有http放入和删除。 – Dylan

+0

那么需要配置路由来响应PUT请求。你能编辑你的文章以包含你的后端代码吗? –

回答

0

更改你打电话到 “/ API /账户”,而不是网址。

您不需要“Controller”或“PasswordChange”。它应该根据方法名称中的单词“Put”以及您使用的HTTP方法自动将控制器名称(不带单词Controller)映射到PutPasswordChange方法。

你甚至可以将控制器方法重命名为“Put”,它可以工作。

N.B.根据您的浏览器和服务器组合,您可能需要在处理PUT和DELETE时启用OPTIONS请求,但这完全是一个单独的主题。

+0

这些只是例子。我知道如何正确调用控制器。它的其他东西正在打破它,除了放置和删除之外的所有东西都能正常工作我从来没有配置过任何东西来让它工作。这就是为什么我迷惑为什么现在不工作。 – Dylan

+0

@Dylan你有没有尝试改变URL结构来检查它不是问题?这就是我一直这样做的方式,并且我已经用我刚刚描述的惯例得到了大量的工作示例。就你所发布的内容而言,我无法亲眼看到代码中的其他事情。 – ADyson

+0

@Dylan你是否确定它是给予405的PUT调用,而不是前面的OPTIONS调用?你有没有在任何不同的服务器环境中尝试它? – ADyson