Question

ASP.NET MVC 2.0 maintenant, par défaut, lancer une exception lorsqu'une action tente de revenir JSON en réponse à une requête GET. Je sais que cela peut être surchargée sur une méthode par base de la méthode à l'aide JsonRequestBehavior.AllowGet, mais est-il possible de mettre sur un contrôleur ou de façon plus (peut-être le web.config)?

Mise à jour: Par le commentaire de Levi, ce que je fini par utiliser -

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

La solution

, comme d'autres paramètres MVC-spécifiques, ne sont pas paramétrable via Web.config. Mais vous avez deux options:

  1. surchargent Controller.Json (objet, chaîne, codage) pour appeler la surcharge JSON (objet, chaîne, encodage, JsonRequestBehavior), en passant JsonRequestBehavior.AllowGet comme dernier argument. Si vous voulez que cela s'applique à tous les contrôleurs, puis le faire à l'intérieur d'une classe de contrôleur de base abstraite, ont alors tous vos contrôleurs sous-classe que classe abstraite.

  2. Faire une méthode d'extension MyJson (ce contrôleur, ...) qui crée un JsonResult et définit les propriétés appropriées, puis l'appeler de votre contrôleur via. This.MyJson (...)

Autres conseils

Il y a une autre option. Utilisez des filtres d'action.

Créer une nouvelle ActionFilterAttribute, l'appliquer à votre contrôleur ou une action spécifique (en fonction de vos besoins). Cela devrait suffire:

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

Appliquez ensuite comme ceci:

[JsonRequestBehavior]
public class Upload2Controller : Controller

MVC 2 bloc JSON pour les requêtes GET pour des raisons de sécurité. Si vous souhaitez remplacer ce comportement, consultez la surcharge pour JSON qui accepte un paramètre JsonRequestBehavior.

public ActionResult Index()

{

   return Json(data, JsonRequestBehavior.AllowGet)

}

J'ai aussi eu cette erreur quand j'utilise MVC 2.0 en utilisant mon ancien code dans MVC 1.0. Je Fiddler pour identifier la cause de l'erreur. Voir les étapes sur la façon de résoudre à l'aide Fidder -

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

Est-ce est la question de la sécurité MVC2 a essayé de répondre? http://haacked.com/archive/2009/06/25/json -hijacking.aspx

Si oui, il semble que la vulnérabilité est un problème que si vous essayez de faire un appel JSON vers un site extérieur. Si votre application MVC2 est seulement faire des appels JSON à votre propre site Web (pour remplir jqgrids par exemple), vous ne devriez pas être en mesure de passer outre l'appel en toute sécurité JSON dans votre contrôleur de base pour permettre toujours obtenir?

Il suffit de modifier le code JSON:

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

à:

$.post("methodname/" + ID, null, function (data, textStatus)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top