我在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
};
}
我该怎么做?有没有办法在全局范围内推广这种方法,还是应该使用动作过滤器?
答案 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