2017-02-10 9 views
2

私のレコードの特定のフィールドに更新のためのメソッドを作成したいと思います。 ASP.NetのWeb API 2の新機能です。私は、メソッドを作成したが、常に私はこのようなカスタムメソッドを作成したいエラーWeb API 2の更新メソッドの作成

{"Message":"The requested resource does not support http method 'GET'."} 

のget:ここ

 [HttpPut] 
     public string AddDeviceID(string deviceID) 
     { 

      User user = db.Users.Single(x => x.MobileUserName == "Dev" && x.MobilePassword == "123"); 
      user.MobileDeviceId = deviceID; 
      db.SaveChanges(); 

      return "success"; 

     } 

は私のルートの設定です:

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

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

私はしないでください私はこのコードで何が欠けているか知っています。私は、更新のためのメソッドを作成するASP.Net MVCのコンセプトにちょうど従っています。

誰でもいくつかのアイデアを提供できますか?前もって感謝します。

+0

これは、データとともにPUTリクエストをAPIに送信する必要があるときに、GETを実行しているためです。 – Nkosi

+0

'AddDeviceID()'アクションをどのように呼び出そうとしましたか? – kat1330

答えて

0

このエラーは、HTTP GET要求を実行したが、アクションに[HttpPut]属性で装飾されており、HTTP PUTのみを受け入れることができたために発生しました。この問題を解決するには、HTTPのPUTリクエストを実行するための機能を実装することができます。また、次の例のように[HttpGet]属性を使用してアクションを飾ることができます:あなたが要求を行った方法

[HttpGet]   
public string AddDeviceID(string deviceID) 
{ 
     User user = db.Users.Single(x => x.MobileUserName == "Dev" && x.MobilePassword == "123"); 
     user.MobileDeviceId = deviceID; 
     db.SaveChanges(); 

     return "success"; 
} 

?ブラウザはHTTP GETリクエストを行います。

+0

ありがとうございます!しかし、これにいくらか混乱しました。私は[HttpGet]を使ってレコードを更新するので、私たちは[HttpPut]を使うレコードを更新すると思った。また、ルート設定でも重要ですか? – nyapz

+0

私は[HttpPut]を使ってレコードを更新するので、私は混乱しています。 – nyapz

+0

@nyapz一般的には、PUTをその種の操作に使用する必要がありますが、ブラウザからは呼び出すことはできません。あなたは 'AddDeviceID()'アクションをどのように呼びますか? – kat1330

1

HTTP PUTリクエストでAPIを呼び出す必要があります。 HTTP GET要求を行うため、このエラーが発生します。

あなたが他の回答を受け入れたとしても、意味がより正確であるため、実際にはHttpPut属性を使用する必要があります。

From wikipedia

は、GETメソッドは、指定されたリソースの表現を要求

をGET。 GETを使用したリクエストはデータを取得するだけで、その他の効果はありません。 (これは他のHTTPメソッドにも当てはまります)[1] W3Cはこの区別に関する指針を公開しました。 "Webアプリケーションの設計には上記の原則である を通知する必要があります。 "

囲まれたエンティティが供給されたURIの下に格納することがPUTメソッドのリクエスト

PUT。 URIがすでに存在するリソースを参照している場合は、 が変更されます。 URIが既存のリソースを指していない場合は、 、そのサーバーはそのURIを持つリソースを作成できます。

あなたがテストしているライブラリ/ソフトウェアでHTTP PUT Requestを送信する方法については、ちょうどGoogle。

ところで:Postmanはテストのための良いツールです。

関連する問題