在我的MVC4应用程序中创建JSON端点的可接受方法是什么?

时间:2014-05-01 21:35:55

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

我想为API创建一个端点。

目前,我的应用程序中有一个类,它执行存储过程并返回一个对象列表,我可以像这样轻松转换为json:

public ActionResult Events()
{
    List<HobbsEventsMobile.Models.Event> events = HobbsEventsMobile.Models.Event.GetEventSummary();

    var jsonSerializer = new JavaScriptSerializer();

    ViewBag.Events = jsonSerializer.Serialize(events);

    return View();
}

然后在我看来:

@ViewBag.Events

但问题是这(显然)会渲染其余的布局。

我该怎么做才能正确设置它,以便这是一个只呈现JSON的端点 - 而不是HTML的其余部分? (如果有办法为整个控制器执行此操作,可以获得奖励)

2 个答案:

答案 0 :(得分:6)

ASP.NET MVC控制器已经有一个返回JSON的方法:

public ActionResult Events()
{
    var events = HobbsEventsMobile.Models.Event.GetEventSummary();
    return Json(events, JsonRequestBehavior.AllowGet);
}

如果控制器充当JSON端点,则可以创建Web API控制器并返回模型:

public class EventController : ApiController
{
    public object Events()
    {
        return HobbsEventsMobile.Models.Event.GetEventSummary();
    }
}

您可以在此处详细了解Web API:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api

答案 1 :(得分:2)

为了扩展上面的答案,Json函数允许您返回多个值,您还可以指定是否允许GET。无论变量的名称是什么,都将是Json有效负载中的名称。例如:

JsonResult retVal = Json(new { page, total, rows }, JsonRequestBehavior.AllowGet);

这将允许GET,并且将包含data.pagedata.totaldata.rows的值(假设您在{{1}中使用的参数名称为data你的jQuery AJAX调用中的函数)。