Мой второй день с ASP.NET MVC и мой первый запрос для кода на SO (да, взяв короткое сокращение).ASP.NET MVC: Как создать фильтр действий для вывода JSON?
Я ищу способ создания фильтра, который перехватывает текущий вывод из Action и вместо этого выводит JSON (я знаю alternate approaches, но это поможет мне понять фильтры). Я хочу игнорировать любые представления, связанные с действием, и просто захватить ViewData ["Output"], преобразовать его в JSON и отправить его клиенту. Заготовки для заполнения:
TestController.cs:
[JSON]
public ActionResult Index()
{
ViewData["Output"] = "This is my output";
return View();
}
JSONFilter.cs:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
/*
* 1. How to override the View template and set it to null?
* ViewResult { ViewName = "" } does not skip the view (/Test/Index)
*
* 2. Get existing ViewData, convert to JSON and return with appropriate
* custom headers
*/
}
Update: ответы сообщества привели к более полному осуществлению для filter for JSON/POX.
Спасибо. 1 строка должна быть скорректирована на ((ViewResultBase) filterContext.Result)). ViewData.Model. Тем не менее, действие Index() по-прежнему показывает связанное с ним представление (Views/Test/Index) вместо того, чтобы показывать кадр JSON, хотя filterContext.Result имеет правильное значение. – aleemb
Выполнение этого в OnActionExecuted отменяет представление и достигает того, что я был после. – aleemb
Хммм. Я бы подумал, что замена результата перед тем, как он будет вынесен, будет подходящим временем. Я уточню свой ответ. – tvanfosson