2014-11-18 2 views
6

Одна из новых возможностей в visual studio 2015 (предварительный просмотр) заключается в том, что «ASP.NET MVC и веб-API ... были объединены в единую модель программирования».Unified MVC и Web Api - тот же контроллер для просмотров и json?

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», что возвращенный объект клиента, и что она может быть оказана либо в виде сериализованная Json или как HTML (используя MVC вид) основанный на согласовании контента. (если пользователь запросил его с помощью «Accept: application/json» или «Accept: text/html»)

Но я не вижу, как это можно сделать, они все еще, кажется, требуют разных контроллеров и методов?

+0

Как я понял, они просто объединены две библиотек в одно: http://www.asp.net/vnext/overview/aspnet-vnext/aspnet-5-overview # unify –

+0

Да, и они на самом деле пишут, что «вам больше не нужно писать немного другой код в зависимости от того, находитесь ли вы в контексте MVC, веб-API или веб-страниц», поэтому я предполагаю, что есть способ написать одно действие (как для json, так и для html-ответа)? В противном случае мне нужно продублировать код – Bjorn

+0

Да, но они не показывают его нигде в своих образцах, что заставляет меня думать, что таких функций не будет –

ответ

0

Это можно сделать без новой унифицированной модели. В любом контроллере 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); 
} 
+0

Hm. В ASP.NET vNext у вас нет IsAjaxRequest и RequestContext. Вы также не можете определить маршрут над контроллером, а не использовать этот контроллер в качестве обычного контроллера MVC. –

Смежные вопросы