ASP.NET MVCで私の2日目と私の最初のSOの要求がありました(ちょっとしたことです)。ASP.NET MVC:アクションフィルタを作成してJSONを出力する方法は?
アクションからの現在の出力を傍受し、代わりに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
*/
}
更新:コミュニティの回答がfilter for JSON/POXのための充実した実装につながりました。
感謝を。 1行を((ViewResultBase)filterContext.Result)に修正する必要があります。)ViewData.Model。ただし、filterContext.Resultが正しい値を持っていても、Index()アクションはJSON blobを表示するのではなく、関連するビュー(Views/Test/Index)を表示します。 – aleemb
OnActionExecutedでこれを行うと、ビューがオーバーライドされ、後になったことが達成されます。 – aleemb
Hmmm。私は、レンダリングされる直前の結果を置き換えることが適切な時期だったと思っていたでしょう。私は私の答えを更新します。 – tvanfosson