2

別のパラメーターの代わりに、ViewModel オブジェクトを WebApi コントローラー アクションに渡すことは可能ですか?

使用する代わりに:

public class ContactsController : ApiController
{
    public IEnumerable<Contact> GetContacts(string p1, string p2)
    {
        // some logic
    }
}

使用したい:

public class ContactsController : ApiController
{
    public IEnumerable<Contact> GetContacts(TestVM testVM)
    {
        // some logic
    }
}

public class TestVM
{
    public string P1 { get; set; }
    public string P2 { get; set; }
}

これは私にはうまくいかないようです。/api/contacts/?P1=aaa&P2=bbb を呼び出すと、testVM オブジェクトが読み込まれません (null)。

また、TestVM で検証属性を定義し、API コントローラーで ModelState.IsValid を使用したいと考えています。

4

2 に答える 2

6

特に明記されていない限り、WebApiはリクエストのコンテンツ/本文を使用して複雑なモデルを逆シリアル化します。Urlを使用してモデルを構築するようにWebApiに指示するには、[FromUri]属性を指定する必要があります。

public IEnumerable<Contact> GetContacts([FromUri]TestVM testVM)
{
    // some logic
}
于 2012-12-05T20:45:22.030 に答える