[C#] ¿Por qué se necesita JsonRequestBehavior?



Answers

Para que sea más fácil para usted también podría crear un actionfilterattribute

public class AllowJsonGetAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var jsonResult = filterContext.Result as JsonResult;

        if (jsonResult == null)
            throw new ArgumentException("Action does not return a JsonResult, 
                                                   attribute AllowJsonGet is not allowed");

        jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;            

        base.OnResultExecuting(filterContext);
    }
}

y úsala en tu acción

[AllowJsonGet]
public JsonResult MyAjaxAction()
{
    return Json("this is my test");
}
Question

¿Por qué se necesita Json Request Behavior ?

Si quiero restringir las solicitudes HttpGet a mi acción, puedo decorar la acción con el atributo [HttpPost]

Ejemplo:

[HttpPost]
public JsonResult Foo()
{
    return Json("Secrets");
}

// Instead of:
public JsonResult Foo()
{
    return Json("Secrets", JsonRequestBehavior.AllowGet);
}

¿Por qué no es [HttpPost] suficiente?
Por qué el marco "nos molesta" con JsonRequestBehavior.AllowGet para cada JsonResult que tenemos. Si deseo denegar las solicitudes de obtención, HttpPost atributo HttpPost .




Mejorando un poco la respuesta de @Arjen de Mooij al hacer que AllowJsonGetAttribute sea aplicable a los controladores mvc (no solo a los métodos de acción individuales):

using System.Web.Mvc;
public sealed class AllowJsonGetAttribute : ActionFilterAttribute, IActionFilter
{
    void IActionFilter.OnActionExecuted(ActionExecutedContext context)
    {
        var jsonResult = context.Result as JsonResult;
        if (jsonResult == null) return;

        jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var jsonResult = filterContext.Result as JsonResult;
        if (jsonResult == null) return;

        jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
        base.OnResultExecuting(filterContext);
    }
}



Links