在MVC4中通过API控制器返回JSON数据的正确方法是什么?我听说你需要使用变量类型作为函数,但我不能这样做因为我当时不能使用.Select(x => new { })
。
我所做的是使用dynamic
之类的
[HttpGet]
public dynamic List() // Not List<Item>
{
var items = _db.Items.OrderBy(x => x.ID).Select(x => new
{
ID = x.ID,
Title = x.Title,
Price = x.Price,
Category = new {
ID = x.Category.ID,
Name = x.Category.Name
}
});
return items;
}
这是最好的方法吗?我问'因为我刚刚开始使用MVC4而且我不想早点养成坏习惯。)
答案 0 :(得分:3)
内置函数Controller.Json
(MSDN)可以做你想要的,即假设你的代码驻留在控制器类中:
[HttpGet]
public dynamic List() // Not List<Item>
{
var items = _db.Items.OrderBy(x => x.ID).Select(x => new
{
ID = x.ID,
Title = x.Title,
Price = x.Price,
Category = new {
ID = x.Category.ID,
Name = x.Category.Name
}
});
return Json(items, JsonRequestBehavior.AllowGet);
}
如果要在GET请求中使用它,则应使用接受JsonRequestBehavior
标志作为参数的重载,并为该参数指定JsonRequestBehavior.AllowGet
。
答案 1 :(得分:1)
您不需要使用dynamic
,简单的方法是为匿名类型返回object
:
[HttpGet]
public object List() // Not List<Item>
{
var items = _db.Items.OrderBy(x => x.ID).Select(x => new
{
ID = x.ID,
Title = x.Title,
Price = x.Price,
Category = new {
ID = x.Category.ID,
Name = x.Category.Name
}
});
return items;
}
或者,返回HttpResponseMessage
:
[HttpGet]
public HttpResponseMessage List() // Not List<Item>
{
var items = _db.Items.OrderBy(x => x.ID).Select(x => new
{
ID = x.ID,
Title = x.Title,
Price = x.Price,
Category = new {
ID = x.Category.ID,
Name = x.Category.Name
}
});
return Request.CreateResponse(HttpStatusCode.OK, items);
}