Domanda

ASP.NET MVC 2.0 sarà ora, per impostazione predefinita, un'eccezione quando un'azione tenta di restituire JSON in risposta ad una richiesta GET. So che questo può essere ignorato su un metodo da basi metodo utilizzando JsonRequestBehavior.AllowGet, ma è possibile impostare su un controller o di base più alti (forse il web.config)?

Aggiornamento: Per il commento di Levi, questo è quello che ho finito per usare -

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

Soluzione

Questa, come altre impostazioni MVC-specifiche, non è impostabile tramite web.config. Ma ci sono due opzioni:

  1. Eseguire l'override del Controller.Json (oggetto, string, Encoding) sovraccarico di chiamare JSON (oggetto, string, Encoding, JsonRequestBehavior), passando JsonRequestBehavior.AllowGet come ultimo argomento. Se si desidera che questo si applica a tutti i controllori, poi fare questo all'interno di una classe astratta controller di base, quindi hanno tutti i controller di sottoclasse che classe astratta.

  2. Fare un metodo di estensione MyJson (questo controller, ...) che crea un JsonResult e imposta le proprietà appropriate, quindi chiamare dal vostro controller tramite this.MyJson (...).

Altri suggerimenti

C'è un'altra opzione. Utilizzare filtri di azione.

Crea un nuovo ActionFilterAttribute, applicare al vostro controller o una determinata azione (a seconda delle esigenze). Questo dovrebbe essere sufficiente:

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

Quindi applicare in questo modo:

[JsonRequestBehavior]
public class Upload2Controller : Controller

MVC 2 blocco JSON per le richieste GET per ragioni di sicurezza. Se si vuole ignorare che il comportamento, controllare il sovraccarico per JSON che accetta un parametro JsonRequestBehavior.

public ActionResult Index()

{

   return Json(data, JsonRequestBehavior.AllowGet)

}

Inoltre ho ottenuto questo errore quando ho uso MVC 2.0 utilizzando il mio vecchio codice MVC 1.0. Io uso violinista per identificare la causa dell'errore. Vedere i passaggi su come risolvere i problemi usando Fidder -

http://www.rodcerrada.com/post/2011/07/11/jQuery-getJSON () e serve alla-non-tirgger-the-callback-in-ASPNET-MVC-2. aspx

E 'questo è il problema di sicurezza MVC2 stava cercando di affrontare? http://haacked.com/archive/2009/06/25/json -hijacking.aspx

Se è così, sembra che la vulnerabilità è solo un problema se si sta cercando di fare una chiamata JSON ad un sito esterno. Se il vostro MVC2 app è solo fare chiamate JSON per il proprio sito web (per riempire jqgrids per esempio), non dovresti essere in grado di escludere con sicurezza la chiamata JSON nel vostro controller di base per consentire sempre ottenere?

Basta cambiare il codice JSON da:

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

a:

$.post("methodname/" + ID, null, function (data, textStatus)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top