2016-11-04 78 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