tutorial net mvc jsonrequestbehavior ejemplos asp asp.net asp.net-mvc-2

ejemplos - ASP.NET MVC 2.0 JsonRequestBehavior Configuración global



web forms c# ejemplos (6)

ASP.NET MVC 2.0 ahora arrojará una excepción de forma predeterminada cuando una acción intente devolver JSON en respuesta a una solicitud GET. Sé que esto se puede anular método por método usando JsonRequestBehavior.AllowGet, pero ¿es posible establecer en un controlador o superior (posiblemente el web.config)?

Actualización: por comentario de Levi, esto es lo que terminé usando-

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding) { return Json(data, contentType, JsonRequestBehavior.AllowGet); }


¿Este es el problema de seguridad que MVC2 intentaba abordar? http://haacked.com/archive/2009/06/25/json-hijacking.aspx

Si es así, parece que la vulnerabilidad solo es un problema si está intentando hacer una llamada JSON a un sitio web externo. Si su aplicación MVC2 solo hace llamadas json a su propio sitio web (para llenar jqgrids, por ejemplo), ¿no debería poder anular de manera segura la llamada Json en su controlador base para permitir siempre obtener?


Esto, al igual que otras configuraciones específicas de MVC, no se puede configurar a través de Web.config. Pero tienes dos opciones:

  1. Reemplazar la sobrecarga del Controlador.Json (objeto, cadena, Codificación) para llamar a Json (objeto, cadena, Codificación, JsonRequestBehavior), pasando JsonRequestBehavior.AllowGet como último argumento. Si desea que esto se aplique a todos los controladores, haga esto dentro de una clase de controlador de base abstracta, luego tenga todos los controladores subclase de esa clase abstracta.

  2. Cree un método de extensión MyJson (este Controlador, ...) que crea un JsonResult y establece las propiedades apropiadas, luego llámelo desde su controlador a través de este. MyJson (...).


Hay otra opción. Use filtros de acción.

Cree un nuevo ActionFilterAttribute, aplíquelo a su controlador o una acción específica (según sus necesidades). Esto debería ser suficiente:

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; } } }

Luego, aplícalo así:

[JsonRequestBehavior] public class Upload2Controller : Controller


MVC 2 bloquea Json para solicitudes GET por razones de seguridad. Si desea anular ese comportamiento, revise la sobrecarga de Json que acepta un parámetro JsonRequestBehavior.

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


Solo cambia el código JSON de:

$.getJson("methodname/" + ID, null, function (data, textStatus)

a:

$.post("methodname/" + ID, null, function (data, textStatus)