42

私は次のWebAPI(GET)を持っています:

public class UsersController : ApiController
{
    public IEnumerable<Users> Get(string firstName, string LastName, DateTime birthDate)
    {
         // Code
    }
}

これはGETなので、次のように呼び出すことができます。

http://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01

そして、ユーザーのxml結果を受け取ります。

次のようにパラメータを1つのクラスにカプセル化することは可能ですか?

public class MyApiParameters
{
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public DateTime BirthDate {get; set;}
}

そして、持っている:

    public IEnumerable<Users> Get(MyApiParameters parameters)

私はそれを試しました、そして私がから結果を得ようとするときはいつでもhttp://localhost/api/users?firstName=john&LastName=smith&birthDate=1979/01/01parameterはnullです。

4

1 に答える 1

74

デフォルトでは、複合型は本体から読み取られるため、null が取得されます。

アクション署名を次のように変更します

 public IEnumerable<Users> Get([FromUri]MyApiParameters parameters)

モデル バインダーでクエリ文字列からモデルを取得する場合。

MSFT の Mike Stall による優れた記事で、Web API がパラメーター バインディングを行う方法について詳しく読むことができます - http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter -binding.aspx

于 2012-09-11T20:35:22.887 に答える