Asp.net mvc 统一MVC和Web Api-视图和json的相同控制器?

Asp.net mvc 统一MVC和Web Api-视图和json的相同控制器?,asp.net-mvc,asp.net-web-api,visual-studio-2015,Asp.net Mvc,Asp.net Web Api,Visual Studio 2015,visual studio 2015(预览版)中的一个新功能是“ASP.NET MVC和Web API…已统一为一个编程模型。” 我假设这意味着我可以编写一个控制器操作“GetCustomerById”,该操作返回一个Customer对象,并且可以基于内容协商将其呈现为序列化Json或Html(使用mvc视图)。(如果用户使用“Accept:application/json”或“Accept:text/html”进行请求) 但我看不出如何做到这一点,他们似乎仍然需要不同的控制器和方法?这可以在

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

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


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

这可以在没有新的统一模型的情况下做到。在任何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);
}

据我所知,他们只是将两个库合并为一个:是的,他们实际上写道“您不再需要根据您是在MVC、Web API还是Web页面上下文中编写略有不同的代码”,所以我假设有一种方法可以编写一个动作(对于json和html响应)?否则,我需要复制代码是的,但他们在示例中的任何地方都没有显示它,这让我认为这样的功能不会从示例()开始,看起来它将是基于属性的路由。因此,如果在同一个控制器中有MVC和WebApi,则必须将属性routing应用于每个操作方法,而不是应用于controller level.Hm。在ASP.NET vNext中,您没有IsAjaxRequest和RequestContext。您也不能在控制器上方定义路由,而将该控制器用作常规MVC控制器。