Jquery Json allowget错误

Jquery Json allowget错误,jquery,asp.net-mvc,json,Jquery,Asp.net Mvc,Json,这个错误随机出现在我们的MVC应用程序中。有时做同样的事情有时不会,有时会。有人知道这是否与任何简单的修复有关,或者这是你们很多人都见过的常见问题吗 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. T

这个错误随机出现在我们的MVC应用程序中。有时做同样的事情有时不会,有时会。有人知道这是否与任何简单的修复有关,或者这是你们很多人都见过的常见问题吗

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)
System.invalidoOperationException:此请求已被阻止,因为在GET请求中使用此请求时,可能会向第三方网站披露敏感信息。要允许GET请求,请将JsonRequestBehavior设置为AllowGet。
位于System.Web.Mvc.JsonResult.ExecuteResult(ControllerContext上下文)
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext ControllerContext,ActionResult ActionResult)
在System.Web.Mvc.ControllerActionInvoker.c_uuDisplayClass14.b_uuu11()中
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter筛选器、ResultExecutingContext预文本、Func`1 continuation)
在System.Web.Mvc.ControllerActionInvoker.c_uuDisplayClass14.c_uuDisplayClass16.b_uuu13()中
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter筛选器、ResultExecutingContext预文本、Func`1 continuation)
在System.Web.Mvc.ControllerActionInvoker.c_uuDisplayClass14.c_uuDisplayClass16.b_uuu13()中
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter筛选器、ResultExecutingContext预文本、Func`1 continuation)
在System.Web.Mvc.ControllerActionInvoker.c_uuDisplayClass14.c_uuDisplayClass16.b_uuu13()中
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext ControllerContext,IList`1 filters,ActionResult ActionResult)
位于System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext ControllerContext,String actionName)
在System.Web.Mvc.Controller.ExecuteCore()上
在System.Web.Mvc.ControllerBase.Execute(RequestContext-RequestContext)中
位于System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext RequestContext)
在System.Web.Mvc.MvcHandler.c_uuudisplayClass8.b_uuu4()中
在System.Web.Mvc.Async.AsyncResultRapper.c__DisplayClass1.b__0()中
在System.Web.Mvc.Async.AsyncResultRapper.c_uuu显示类8`1.b_uuu7(IAsyncResult)
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult`1.End()
位于System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
在System.Web.Mvc.MvcHandler.System.Web.IHTTPassynchandler.EndProcessRequest中(IAsyncResult结果)
在System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()中
在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)

您的问题答案在堆栈跟踪中。“JsonRequestBehavior到AllowGet”

因此,在控制器中使用它作为:

return Json(data, JsonRequestBehavior.AllowGet)

似乎您有时会根据HTTP GET调用控制器操作。为了能够返回JSON结果,您应该使用如下代码

return Json(data, JsonRequestBehavior.AllowGet);
在绕过这些安全控制之前,您应该阅读

如果您仅在响应Http POST时公开JSON数据,则不会受到此攻击

您可以简单地用[HttpPost]注释JSON操作,并在客户端执行以下操作

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

});

返回Json(PartialView(“index”).ToJsonObject(this),JsonRequestBehavior.AllowGet)我认为,四处走动,盲目地告诉人们忽略AllowGet被禁用的安全原因,这可能是一个错误用$.post来获取数据并避免整个问题并不难。这一点很好。对于那些关心这一点的人,Haack有一篇很好的文章介绍了这一点:Haack文章现在位于:在尝试接收JSON数据时,接受GET请求是完全合理的。帖子应该用于创建新记录,或者至少用于更改状态。GET请求应该用于检索不影响状态的数据。上述JsonRequestBehavior.AllowGet解决方案存在的原因是为了确保开发人员故意绕过此保护。建议使用post是为了避免设计/实现中的缺陷,该缺陷允许将此数据暴露给第三方。这甚至显示在堆栈跟踪的第一行中:System.InvalidOperationException:此请求已被阻止,因为在GET请求中使用敏感信息时可能会向第三方网站披露。要允许GET请求,请将JsonRequestBehavior设置为AllowGet