统一MVC和Web Api - 用于视图和json的相同控制器?

时间:2014-11-18 12:35:21

标签: asp.net-mvc asp.net-web-api visual-studio-2015

Visual Studio 2015(预览版)的一个新功能是“ASP.NET MVC和Web API ......已统一到一个编程模型中。”

http://blogs.msdn.com/b/webdev/archive/2014/11/12/announcing-asp-net-features-in-visual-studio-2015-preview-and-vs2013-update-4.aspx

我认为这意味着我可以编写单个控制器操作“GetCustomerById”,它返回一个Customer对象,并且可以基于内容协商将其呈现为序列化Json或Html(使用mvc视图)。 (如果用户通过“Accept:application / json”或“Accept:text / html”请求它)

但我看不出如何做到这一点,他们似乎仍然需要不同的控制器和方法?

1 个答案:

答案 0 :(得分:1)

这可以在没有新的统一模型的情况下完成。在任何MVC控制器中,您都可以检查标头以及Request.IsAjaxRequest()方法,以确定是否如何返回数据。

以下是这种方法的简单示例:

internal ActionResult ReturnResultAsRequested(object result)
{
  if (Request.Headers["Accept"].Contains("application/json"))
    return Json(result);
  else if (Request.IsAjaxRequest())
    return PartialView(Request.RequestContext.RouteData.Values["Action"], result);
  else
    return View(Request.RequestContext.RouteData.Values["Action"], result);
}