25

Web APIを使用すると、パラメータ要求は常にnullになります。単純な型をパラメーターとして使用する代わりに、強く型付けされたオブジェクトをパラメーターとして使用することで何かが欠けていますか?

URL

http://localhost:2222/api/v1/divisions?EventId=30

コントローラのアクション

public virtual ApiDivisionsResponse Get(ApiDivisionsRequest request)
        {
            return _apiDivisionsService.GetDivisions(request);
        }

物体

public class ApiDivisionsRequest : ApiAuthorizedRequest
    {
        public ApiDivisionsRequest()
        {
            Page = 1;
            PageSize = 10;
        }

        public int EventId { get; set; }
        public int PageSize { get; set; }
        public int Page { get; set; }
        public string[] Includes { get; set; }
    }  
4

1 に答える 1

51

Web APIでパラメータバインディングがどのように機能するかをよりよく理解するために、次の記事を読むことを強くお勧めします。これを読むと、デフォルトでWeb APIがクエリ文字列パラメーターをプリミティブ型にバインドし、本文のコンテンツを複合型に要求することがわかります。

したがって、クエリ文字列パラメータを複合型にバインドする必要がある場合は、パラメータを次のパラメータで装飾することにより、このデフォルトの動作をオーバーライドする必要があり[FromUri]ます。

public virtual ApiDivisionsResponse  Get([FromUri] ApiDivisionsRequest request)
{
    ...
}

そして、ええ、私はあなたに同意します-それはめちゃくちゃです-モデルのバインドはプレーンなASP.NET MVCでとても簡単で、WebAPIで悪夢を生み出しました。しかし、それがどのように機能するかを理解すれば、落とし穴を避けることができます。

于 2012-09-25T19:49:57.197 に答える