2012-05-03 31 views
2

私はこれをasp.net mvc 4を使用してWeb APIを構築しようとしています。 Booksリソースがあるとします。取得、投稿、削除はうまく動作しますが、Postでは少し混乱します。私がPUTをどのように使いたいかは、CQRSのように、タイトルを更新するための1つのアクションPUT、著者を更新する別のアクションPUT、およびブックをお気に入りにするための他のアクションです。このすべてのPUTアクションは、さまざまなタイプのコマンドでオーバーロードされ、1つのパラメータしかありません。このリソースへのPUTリクエストをMVCからルーティングしようとすると、リクエストと一致する複数のPUTアクションが発生します。誰が処理するためにルーティングを設定する方法を提案することができます:複数のPUTアクション、asp.net mvc 4 web api

public HttpResponseMessage Put(MakeFavorite mf){/*code*/} 

public HttpResponseMessage Put(ChangeTitle ct){/*code*/} 

public HttpResponseMessage Put(UpdateAuthor ua){/*code*/} 

答えて

0

各機能は本当にお互いにやることがたくさん持っていないので、あなたは別の各コントローラに各putメソッドを入れて試してみてください。

public class MakeFavoriteController : ApiController 
{ 
    public HttpResponseMessage Put(MakeFavorite mf) 
    { 
     // Code 
    } 
} 

public class ChangeTitleController : ApiController 
{ 
    public HttpResponseMessage Put(ChangeTitle ct) 
    { 
     // Code 
    } 
} 

public class UpdateAuthorController : ApiController 
{ 
    public HttpResponseMessage Put(UpdateAuthor ua) 
    { 
     // Code 
    } 
} 
+0

))=素敵なRESTfulなAPIを構築するためにypuを助けるなど

希望との関係をinterpetことができ、あなたはなぜコメントしなければなりません。 –

+0

私はそれらのdownvotesがあなたの例のRPCスタイルのメカニズムのためだと思います。 –

+0

これは実際には関連していないと仮定しています。あなたは直接質問に答えていません。 –

6

ここではRPCを適用しない方がいいと思います。デビッドソリューションにはRPCアーチファクトがいくつかあります。 まず、URI構造を設計する必要があります。例:次に、いくつかのコントローラを追加

routes.MapHttpRoute(
       name: "BookTitleApiRoute", 
       routeTemplate: "books/{bookId}/title/{title} ", 
       defaults: new {controller = "BookTitleController", title = RouteParameter.Optional} 
       ); 

/books/{bookId}/favouritestate/{state} 
/books/{bookId}/title/{title} 
/books/{bookId}/author/{author} 

そして、これを処理するために、あなたのルーティングテーブルを更新します。たとえば:

public class BookTitleController : ApiController 
    { 
     // GET /books/{bookId}/title/ 
     public HttpResponseMessage Get(string bookId) 
     { 
      return your book title 
     } 
     // PUT /books/{bookId}/title/{title} 
     public HttpResponseMessage Put(string bookId,string title) 
     { 
      update book title and return result 
     } 

    } 

あなたはまた、そのようなオブジェクトとあなたはdownvote場合、これは

+0

後半のコメントを残して申し訳ありません...これはPutで動作しますが、同じコントローラから複数の取得または送信があった場合はどうでしょうか?同じコントローラに複数の投稿と取得を入れることをお勧めしますか? – Skadoosh

+0

複数の取得または投稿が必要なリソースの例を提供できますか?メソッドのオーバーライドを使用することができます。 –

+0

また、部分的な更新の対象となるPATCH動詞もあります。 http://www.mnot.net/blog/2012/09/05/patch –

関連する問題