24

我只是想知道是否可以在单个 Web Api 中返回多种类型。例如,我想要一个 api 同时返回客户列表和订单(这两组数据可能相互关联,也可能不相互关联?

4

3 回答 3

39

要返回多种类型,可以将它们包装成匿名类型,有两种可能的方法:

public HttpResponseMessage Get()
{
    var listInt = new List<int>() { 1, 2 };
    var listString = new List<string>() { "a", "b" };

    return ControllerContext.Request
        .CreateResponse(HttpStatusCode.OK, new { listInt, listString });
}

或者:

public object Get()
{
    var listInt = new List<int>() { 1, 2 };
    var listString = new List<string>() { "a", "b" };

    return  new { listInt, listString };
}

还要记住XML 序列化程序不支持匿名类型。因此,您必须确保请求应具有标头:

Accept: application/json

为了接受json格式

于 2012-07-31T05:24:37.550 回答
0

你必须使用 JsonNetFormatter 序列化器,因为默认的序列化器 DataContractJsonSerializer 不能序列化匿名类型。

public HttpResponseMessage Get()
{
    List<Customer> cust = GetCustomers();
    List<Products> prod= GetCustomers();
    //create an anonymous type with 2 properties
    var returnObject = new { customers = cust, Products= prod };
    return new HttpResponseMessage<object>(returnObject , new[] { new JsonNetFormatter() });
}

你可以从这里得到 JsonNetFormatter

于 2012-07-31T04:50:20.070 回答
0

而不是这个:

return ControllerContext.Request
       .CreateResponse(HttpStatusCode.OK, new { listInt, listString });

用这个:

return Ok(new {new List<int>() { 1, 2 }, new List<string>() { "a", "b" }});
于 2020-04-15T20:16:36.410 回答