2016-11-04 2 views
0

私は405メソッドが見つかりません私のWeb APIコントローラに角度を付けて$ http.putを使用しようとしたときにエラーが発生しました。405メソッドが許可されていません - MVCプロジェクト内のWeb API

ほとんどの場合、WebDavと関連があることがわかりました。私はもう一回、この問題に遭遇したことのないWeb APIプロジェクトを持っています。以下は私のサンプルコールです。それはうんざりしている、私は基本的にすべてのWeb設定で同じように正常に動作するように見える他の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); 
          }); 

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

をルーティング私のWeb APIであり、ここで

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

は、あなたがそれを打つますかどうかを確認するためにあなたのルートにブレークポイントを設定することがありますか? –

+0

何もヒットしません。戻ってくるのは405メソッドが見つかりません。私は、同じコントローラ、異なる機能に投稿を行う場合、それはうまくいきます....その唯一のHTTPは、putsと削除します。 – Dylan

+0

PUTリクエストに応答するようにルートを設定する必要があります。投稿を編集してバックエンドコードを含めることはできますか? –

答えて

0

変更するには、代わりに "/ API /アカウント" に呼び出しているURLと呼ばれているWeb APIをコントローラであります。

「コントローラ」または「PasswordChange」は必要ありません。コントローラーの名前(コントローラーという言葉なし)をPutPasswordChangeメソッドにマップするのは、メソッド名に "Put"という単語と使用したHTTPメソッドに基づいて自動的にマップするだけです。

コントローラーメソッドの名前を単に「Put」に変更しても機能します。

N.B.ブラウザとサーバーのコンボによっては、PUTとDELETEを処理するときにOPTIONS要求を有効にする必要があるかもしれませんが、それは別の話題です。

+0

これは例にすぎません。私はコントローラを適切に呼び出す方法を知っています。 putとdeleteを除いてすべてを破っているものは、うまく動作します。私は以前にこれを動作させるために何も設定する必要がなかった。だから私はなぜ今働いていないのか混乱している。 – Dylan

+0

@Dylanあなたは実際にURL構造を変更して、それが問題ではないことを再確認しましたか?それで私はいつもそれをやってきたし、今説明したコンベンションを使ってたくさんの実践的な例が得られました。あなたが投稿したものに関しては、私は個人的にコードで問題を見ることはできません。 – ADyson

+0

@Dylanあなたはそれが405を与えているPUT呼び出しであり、先行するOPTIONS呼び出しではないことも確かですか?そして、あなたはどんな異なるサーバー環境でも試してみましたか? – ADyson

関連する問題