2015-02-11 66 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