c# return allowget - ¿Por qué se necesita JsonRequestBehavior?





2 Answers

Para facilitarte la tarea, también puedes crear un atributo de filtro de acción.

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 usalo en tu accion

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

¿Por qué es necesario el 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 suficiente [HttpPost] ?
¿Por qué el marco nos " JsonRequestBehavior.AllowGet " con el JsonRequestBehavior.AllowGet para cada JsonResult que tenemos? Si quiero denegar las solicitudes de obtención, HttpPost atributo HttpPost .




Mejorando un poco la respuesta de @Arjen de Mooij haciendo 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);
    }
}





Related