Frage

ASP.NET MVC 2.0 wird nun standardmäßig eine Ausnahme auslösen, wenn eine Aktion JSON zurückzukehren versucht, in Antwort auf eine GET-Anfrage. Ich weiß, das kann durch die Verwendung JsonRequestBehavior.AllowGet auf ein Verfahren, durch Verfahren außer Kraft gesetzt werden, aber ist es möglich, auf einem Controller oder höher Basis (möglicherweise die web.config) zu setzen?

Update: Per Levis Kommentar, das ist, was ich am Ende mit -

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

Lösung

Diese, wie auch andere MVC-spezifische Einstellungen, ist über Web.config nicht einstellbar. Aber Sie haben zwei Möglichkeiten:

  1. Überschreiben Sie die Controller.Json (Objekt, Schnur, Encoding) Überlastung Json (Objekt, Schnur, Encoding, JsonRequestBehavior) zu nennen, vorbei JsonRequestBehavior.AllowGet als letztes Argument. Wenn Sie dies für alle Controller anwenden möchten, dann tun Sie dies innerhalb einer abstrakten Basis Controller-Klasse, dann haben alle Controller, die abstrakte Klasse Unterklasse.

  2. Erstellen Sie eine Erweiterungsmethode MyJson (Dieser Controller, ...), die eine JsonResult schafft und setzt die entsprechenden Eigenschaften, rufen sie dann von dem Controller über this.MyJson (...).

Andere Tipps

Es gibt eine andere Option. Verwenden Sie Maßnahmenfilter.

Erstellen Sie eine neue Action, wenden Sie es auf Ihrem Controller oder eine bestimmte Aktion (je nach Bedarf). Dies sollte genügen:

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

Dann gilt es wie folgt aus:

[JsonRequestBehavior]
public class Upload2Controller : Controller

MVC 2 Block Json für GET-Anfragen aus Sicherheitsgründen. Wenn Sie dieses Verhalten außer Kraft setzen möchten, überprüfen Sie die Überlastung für Json aus, die einen JsonRequestBehavior Parameter akzeptiert.

public ActionResult Index()

{

   return Json(data, JsonRequestBehavior.AllowGet)

}

Ich habe auch diesen Fehler, wenn ich meinen alten Code zuerst in MVC 1.0 verwenden MVC 2.0 verwenden. Ich benutze Fiedler die Ursache des Fehlers zu identifizieren. Befolgen Sie die Schritte auf, wie es zu beheben Fidder mit -

http://www.rodcerrada.com/post/2011/07/11/jQuery-getJSON () -Ist-not-tirgger-the-Rückruf-in-ASPNET-MVC-2. aspx

Ist das die Sicherheitslücke MVC2 Adresse versucht? http://haacked.com/archive/2009/06/25/json -hijacking.aspx

Wenn ja, wie es scheint, die Verwundbarkeit nur ein Problem, wenn Sie versuchen, eine json Anruf an eine externe Website zu tun. Wenn Ihr MVC2 App ist nur json Anrufe an Ihre eigene Website zu machen (zu füllen jqgrids zum Beispiel), dann sollten Sie nicht in der Lage sein, ohne Schwierigkeiten den Json Anruf in Ihren Basis-Controller überschreiben, um immer erhalten zu lassen?

Ändern Sie einfach JSON-Code aus:

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

zu:

$.post("methodname/" + ID, null, function (data, textStatus)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top