Pregunta

ASP.NET MVC 2.0 ahora, por defecto, una excepción cuando una acción intenta volver JSON en respuesta a una petición GET. Sé que esto se puede anular en un método por el método base mediante el uso de JsonRequestBehavior.AllowGet, pero es posible establecer en un controlador o base mayor (posiblemente el web.config)?

Actualización: Por el 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);
}
¿Fue útil?

Solución

Esto, al igual que otros ajustes MVC-específicas, no es ajustable a través Web.config. Sin embargo, usted tiene dos opciones:

  1. Anular la Controller.Json (Object, String, Encoding) sobrecargar a llamar JSON (objeto, cuerda, Codificación, JsonRequestBehavior), pasando JsonRequestBehavior.AllowGet como el último argumento. Si quieres que esto se aplica a todos los controladores, y luego hacer esto dentro de una clase de controlador de base abstracta, a continuación, tienen todos los controladores que subclasifican clase abstracta.

  2. Hacer una MyJson método de extensión (este controlador, ...) que crea un JsonResult y establece las propiedades adecuadas, y luego llamarlo desde el controlador a través de this.MyJson (...).

Otros consejos

Hay otra opción. Acción utilizar filtros.

Crear un nuevo ActionFilterAttribute, aplicarlo a su controlador o una acción específica (dependiendo de 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;
        }
    }
}

A continuación, aplicar lo siguiente:

[JsonRequestBehavior]
public class Upload2Controller : Controller

MVC 2 bloque de JSON para peticiones GET por razones de seguridad. Si desea anular ese comportamiento, echa un vistazo a la sobrecarga para JSON que acepta un parámetro JsonRequestBehavior.

public ActionResult Index()

{

   return Json(data, JsonRequestBehavior.AllowGet)

}

También tengo este error la primera vez que utilizo MVC 2.0 usando mi viejo código en MVC 1.0. Yo uso violinista para identificar la causa del error. Consulte los pasos de cómo solucionar usando Fidder -

http://www.rodcerrada.com/post/2011/07/11/jQuery-getJSON () -¿La-no-tirgger-la-devolución de llamada-en-ASPNET-MVC-2. aspx

Es esto está el problema de seguridad MVC2 estaba tratando de resolver? http://haacked.com/archive/2009/06/25/json -hijacking.aspx

Si es así, parece que la vulnerabilidad es sólo un problema si usted está tratando de hacer una llamada JSON a un sitio web externo. Si su aplicación MVC2 es sólo hacer llamadas JSON para su propio sitio web (para llenar jqgrids por ejemplo), ¿no debería ser capaz de reemplazar con seguridad la llamada JSON en el controlador de base para permitir siempre conseguir?

Sólo cambia el código JSON en:

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

a:

$.post("methodname/" + ID, null, function (data, textStatus)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top