4

新しいASP.NetMVC4ベータ版を自分のマシンにインストールし、WebAPIがどのように機能するかを理解しようとしています。単一のコレクション(本など)のデモを作成しました。asp.netWebサイトの例に従いました。コレクションに投稿するための独自の方法を実装しました。つまり、新しい本の追加、すべての本の取得、特定の本の取得、本の更新、および本のレコードの削除です。これはすべて正常に機能します。

元:

POST /books - adds a new book
GET /books - gets all books
GET /books/1 - get a particular book
PUT /books/1 - update a particular book
DELETE /books/1 - delete a particular book

次に、本のコレクション内に別のコレクションを追加します。たとえば、著者の場合、新しいコレクションに対して同じPOST、PUT、GET、およびDELETEの呼び出しを実装します。

新しい呼び出しを次のようにします。

POST /books/1/authors - add a new author to a book
GET /books/1/authors - gets all authors of a book
GET /books/1/authors/a@a.com - get a particular author for a book
PUT /books/1/authors/a@a.com - update a particular author for a book
DLETE /books/1/authors/a@a.com - delete a particular author for a book

この呼び出しを機能させるためのルートを追加する方法がわかりません。デフォルトでは、プロジェクトでこのルートを取得します。

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

コレクションとそれらの間の関連付けのために、このパターンでルートを処理する正しい方法は何ですか?

4

2 に答える 2

2

グローバルでルートを管理すると、混乱を招き、エラーが発生しやすくなります。個人的には、属性ルーティングパッケージがルーティング構成を大幅に簡素化するのに役立つことがわかりました。この記事では、それを取得して使用する方法について説明します。

http://www.strathweb.com/2012/05/attribute-based-routing-in-asp-net-web-api/

于 2012-05-27T13:41:17.023 に答える
0

ケンの属性ルーティングの使用方法の方が優れていると思います。この投稿から見つけたばかりで、私自身もおそらくそれを使用します。しかし、これが私がARについて知る前に思いついたものです。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "JustController",
            routeTemplate: "api/Books/{bookId}/{category}/{categoryId}/{subCategory}",
            defaults: new
            {
                controller = "books",
                bookId= RouteParameter.Optional,
                category = RouteParameter.Optional,
                categoryId = RouteParameter.Optional,
                subCategory = RouteParameter.Optional
            },
            constraints: new
            {
                bookId= @"\d*",
                category= @"(|authors|pictures|videos)", 
                categoryId = @"\d*",
                subCategory = @"(|comments)"
            }
        );

次に、Get、Post、Delete、Put関数のRequestプロパティからURLを使用して、必要なパラメーターを取得することを考えていました。

例えば:

    public class BooksController : ApiController
    {
        // GET api/books
        public Book Get(int bookId)
        {
         var url = this.Request.RequestUri.ToString() // decide how to handle!
于 2012-08-30T10:17:56.640 に答える