如何覆盖全局影响MVC中所有控制器的方法?

时间:2016-09-20 12:31:40

标签: asp.net-mvc asp.net-mvc-4

我在MVC中遇到MaxJsonLength问题。当我返回json()时出现问题。然后我找到了一个解决方案here(请阅读此内容),由 fanisch 回答。现在我有很多控制器,我有MaxJsonLength的问题。我想全局覆盖这个方法。

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
{
    return new JsonResult()
    {
        Data = data,
        ContentType = contentType,
        ContentEncoding = contentEncoding,
        JsonRequestBehavior = behavior,
        MaxJsonLength = Int32.MaxValue
    };
}

我该怎么做?有没有办法在全局范围内推广这种方法,还是应该使用动作过滤器?

1 个答案:

答案 0 :(得分:3)

创建扩展方法的最简单方法(完全与OP上的其他注释一致)。以下是您在OP中作为扩展方法的方法的实现。您可以根据需要重命名。我还为参数添加了一些默认值,这些参数与控制器方法重载中使用的参数相同。

public static class ControllerExtensions {
    public static JsonResult AsJson(this Controller controller, object data, JsonRequestBehavior behavior = JsonRequestBehavior.AllowGet, string contentType = null, System.Text.Encoding contentEncoding = null)
    {
        return new JsonResult()
        {
            Data = data,
            ContentType = contentType,
            ContentEncoding = contentEncoding,
            JsonRequestBehavior = behavior,
            MaxJsonLength = Int32.MaxValue
        };
    }
}

// how to call from inside an action (method) on a controller
public class SomeController : Controller {
    public JsonResult GetSomething(){
        return this.AsJson(new {prop1 = "testing"});
    }
}

有关扩展方法的详情,请参阅Extension Methods