51 votes

Erreur Json allowget

Cette erreur apparaît dans notre application MVC de façon aléatoire. Parfois, en faisant exactement la même chose, elle ne se produit pas ; parfois, elle se produit. Quelqu'un sait-il si cela a un rapport avec quelque chose qui pourrait être un simple correctif, ou si c'est quelque chose de commun que beaucoup d'entre vous ont vu ?

System.InvalidOperationException: This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to AllowGet.
   at System.Web.Mvc.JsonResult.ExecuteResult(ControllerContext context)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass14.b__11()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass14.<>c__DisplayClass16.b__13()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass14.<>c__DisplayClass16.b__13()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass14.<>c__DisplayClass16.b__13()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
   at System.Web.Mvc.Controller.ExecuteCore()
   at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
   at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)
   at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.b__4()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.b__0()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.b__7(IAsyncResult _)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

120voto

Chandu Points 40028

La réponse à votre question était dans la trace de la pile. "JsonRequestBehavior à AllowGet"

Alors utilisez-le dans votre contrôleur comme :

return Json(data, JsonRequestBehavior.AllowGet)

22voto

Yablargo Points 1193

Vous devriez lire http://haacked.com/archive/2009/06/24/json-hijacking.aspx/ avant de contourner ces contrôles de sécurité.

Si vous exposez vos données JSON uniquement en réponse à un Http POST, vous n'êtes pas vulnérable à cette attaque.

Vous pouvez simplement annoter votre action JSON avec [HttpPost] et faire quelque chose comme suit dans le client

$.post('/blag/JSON', function (data) {
       //do something with my json data object here

});

4voto

Oleg Points 136406

Il semble que vous appelez parfois l'action du contrôleur par HTTP GET. Pour pouvoir renvoyer des résultats JSON, vous devriez utiliser un code tel que

return Json(data, JsonRequestBehavior.AllowGet);

0voto

ibrahim ozboluk Points 67

-1voto

Farhad Manafi Points 304
return Json(PartialView("index").ToJsonObject(this), JsonRequestBehavior.AllowGet);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X