使用MVC4返回值的正确方法

时间:2012-09-04 10:37:10

标签: c# asp.net-mvc-4 asp.net-web-api

在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而且我不想早点养成坏习惯。)

2 个答案:

答案 0 :(得分:3)

内置函数Controller.JsonMSDN)可以做你想要的,即假设你的代码驻留在控制器类中:

[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);
}