【问题标题】:ASP MVC Replace View Generation With JSON At Run Time?ASP MVC 在运行时用 JSON 替换视图生成?
【发布时间】:2015-02-11 18:26:19
【问题描述】:

假设我有这样的控制器操作:

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

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

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

【问题讨论】:

  • return this.Json(new SomeModel { ... });
  • @Nikolay,我只想在测试环境中获取 JSON —— 这样就行不通了。
  • 然后当#if SOMEFLAG为真时返回JSON。
  • 执行if 语句与方法和渲染中执行的其他操作相比算不了什么

标签: c# .net asp.net-mvc model-view-controller


【解决方案1】:

这很简单……

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

    if (somePropertyYouWantToCheck)
        return Json(model);

    return View(model);
}

【讨论】:

    【解决方案2】:

    我找到了 MVC 功能,它完全符合我的要求——过滤器。在我的例子中,一个全局结果过滤器将 ActionResult 替换为 JsonResult。

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

    【讨论】:

    • 显然我可以编辑动作本身以有条件地返回 JSON,但这不能扩展到我们的整个代码库——因此是全局动作过滤器。
    • 您确实意识到动作过滤器不会在单元测试中执行,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2011-05-12
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多