2015-02-11 59 views
0

说我有像这样的控制器操作:ASP MVC在运行时用JSON替换视图生成?

public ActionResult Foo() { 
    return View(new SomeModel {...}); 
} 

是否有可能对我来说,在运行时,有这样的行动回报JSON,而不是HTML?这是一些自动化测试。我发现的唯一方法是修改我的控制器的基类以覆盖View(...),这样如果某些设置为真,它将返回Json(model)而不是通常的操作。

我宁愿不这样做,因为这意味着即使在非测试环境中也会针对每个操作进行评估。

+0

'返回this.Json(新SomeModel {...});' – 2015-02-11 18:32:34

+0

你可以尝试一些像[返回或者基于请求从MVC的Web API XML或JSON(HTTP:// stackoverflow.com/q/13053485/580951)。 – Romoku 2015-02-11 18:33:51

+0

@Nikolay,我只想在测试环境中获得JSON - 所以这是行不通的。 – mamidon 2015-02-11 18:40:32

回答

0

这是相当琐碎......

public ActionResult Foo() { 
    var model = new SomeModel {...}; 

    if (somePropertyYouWantToCheck) 
     return Json(model); 

    return View(model); 
} 
0

我找到了MVC功能,不正是我想要的东西 - 过滤器。在我的例子中,一个全局结果过滤器用JsonResult替换了ActionResult。

http://weblogs.asp.net/gunnarpeipman/asp-net-mvc-3-global-action-filters

+0

很显然,我可以编辑操作本身来有条件地返回JSON,但这不能扩展到我们的整个代码库 - 因此是全局操作过滤器。 – mamidon 2015-02-13 17:47:40

+0

你意识到动作过滤器不会在单元测试中执行,对吧? – 2015-02-13 21:27:28