2010-01-08 103 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}; 
    } 
}