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 对象不会被填充(空)。

此外,我希望 TestVM 定义验证属性并在我的 API 控制器中使用 ModelState.IsValid。

4

2 回答 2

6

除非另有说明,否则 WebApi 将使用请求的内容/正文反序列化复杂模型。要告诉 WebApi 使用 Url 构建模型,您需要指定 [FromUri] 属性:

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

我知道发布另一个答案有点晚了,但我认为它对使用 .net 核心作为 Web API 服务的任何人都有用

public IEnumerable<Contact> GetContacts([FromQuery]TestVM testVM)
于 2020-05-30T17:03:12.293 回答