2010-01-08 90 views
2

默認情況下,ASP.NET MVC使用ContentResult for控制器方法,返回的結果不是從actionresult類型繼承的。這就是爲什麼如果我們將返回一些poco實體,它將只是它的類型名稱。更改默認控制器actionresult

我可以重載控制器中的某些東西,使其默認返回jsonresult。

例子:

//返回JSON的產品表示,而不是產品類型名稱

public MyController: Controller 
{ 
    public Product MyAction() 
    { 
      return new Product { Name = "Foo", ID = 1 }; 
    } 
} 

最好的問候, 阿列克謝Z.

回答

3

爲什麼不直接返回一個JSonResult?

public ActionResult MyAction() 
{ 
    return Json(new Product { Name = "Foo", ID = 1 }); 
} 
+0

我想避免的ActionResult作爲返回參數。 我希望我的方法被聲明爲:public Product MyAction() MVC中有可能嗎? – 2010-01-09 10:03:18

+0

您可以嘗試覆蓋項目類上的ToString(),以便它返回格式爲JSON的對象,但您可能必須每次都在手動方法中手動更改Response的ContentType,否則它將使用默認值 - 絕對不是'application/json'。爲什麼你如此熱衷於讓方法返回一個'Product'而不是'ActionResult'?解開單元測試的JSON結果並不難。 – tvanfosson 2010-01-09 13:56:03

1

你可以用這樣一個屬性修飾你的控制器:

public class ReturnJsonAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var result = filterContext.ActionDescriptor.Execute(filterContext, filterContext.ActionParameters); 
     filterContext.Result = new JsonResult {Data = result}; 
    } 
}