我只是想知道是否可以在单个 Web Api 中返回多种类型。例如,我想要一个 api 同时返回客户列表和订单(这两组数据可能相互关联,也可能不相互关联?
问问题
29236 次
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 回答