Asp.net 更改默认控制器操作结果

Asp.net 更改默认控制器操作结果,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,默认情况下,ASP.NET MVC使用ContentResult作为控制器方法,该方法返回的结果不是从actionresult类型继承的。这就是为什么如果我们返回某个poco实体,它将只是它的类型名 我是否可以在控制器中重载一些内容,使其在默认情况下返回jsonresult 例如: //返回json产品表示,而不是产品typename public MyController: Controller { public Product MyAction() { r

默认情况下,ASP.NET MVC使用ContentResult作为控制器方法,该方法返回的结果不是从actionresult类型继承的。这就是为什么如果我们返回某个poco实体,它将只是它的类型名

我是否可以在控制器中重载一些内容,使其在默认情况下返回jsonresult

例如:

//返回json产品表示,而不是产品typename

public MyController: Controller
{
    public Product MyAction()
    {
          return new Product { Name = "Foo", ID = 1 };
     }
}
致以最良好的祝愿,
Alexey Z.

为什么不直接返回JSonResult

public ActionResult MyAction()
{
    return Json( new Product { Name = "Foo", ID = 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};
    }
}

我想要避免ActionResult作为返回参数。我希望将我的方法声明为:public Product MyAction()在MVC中是否可行?您可以尝试重写project类上的ToString(),以便它返回格式为JSON的对象,但是,您可能每次都必须在方法中手动更改响应的ContentType,否则它将使用默认值——显然不是
application/json
。为什么您如此热衷于让方法返回
产品
,而不是
操作结果
?为单元测试解包JSON结果并不难。