ASP.NET MVC 2.0 JsonRequestBehavior Global Setting ASP.NET MVC 2.0 JsonRequestBehavior Global Setting asp.net asp.net

ASP.NET MVC 2.0 JsonRequestBehavior Global Setting


This, like other MVC-specific settings, is not settable via Web.config. But you have two options:

  1. Override the Controller.Json(object, string, Encoding) overload to call Json(object, string, Encoding, JsonRequestBehavior), passing JsonRequestBehavior.AllowGet as the last argument. If you want this to apply to all controllers, then do this inside an abstract base controller class, then have all your controllers subclass that abstract class.

  2. Make an extension method MyJson(this Controller, ...) which creates a JsonResult and sets the appropriate properties, then call it from your controller via this.MyJson(...).


There's another option. Use Action Filters.

Create a new ActionFilterAttribute, apply it to your controller or a specific action (depending on your needs). This should suffice:

public class JsonRequestBehaviorAttribute : ActionFilterAttribute{    private JsonRequestBehavior Behavior { get; set; }    public JsonRequestBehaviorAttribute()    {        Behavior = JsonRequestBehavior.AllowGet;    }    public override void OnResultExecuting(ResultExecutingContext filterContext)    {        var result = filterContext.Result as JsonResult;        if (result != null)        {            result.JsonRequestBehavior = Behavior;        }    }}

Then apply it like this:

[JsonRequestBehavior]public class Upload2Controller : Controller


MVC 2 block Json for GET requests for security reasons. If you want to override that behavior, check out the overload for Json that accepts a JsonRequestBehavior parameter.

public ActionResult Index(){   return Json(data, JsonRequestBehavior.AllowGet)}