我有一个网络应用程序,它具有仪表板功能。该应用程序被许多不同环境中的许多不同公司使用,即所有浏览器。
有一段javascript每60秒通过一个http POST刷新该仪表板到一个返回JSON的url。
对于一个用户(以及仅根据我的日志的一个用户),从该URL每隔60秒生成以下.NET错误消息:
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__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
对于所有其他用户,从来没有问题。
我知道这个用户所在的网络是代理的(政府)。该用户是新用户 - 即我们从未在此网络上拥有其他用户。
上面让我相信他们的代理是出于某种原因(尝试带宽优化?)修改请求,将POST转换为GET,默默地。我的Asp.NET MVC应用程序(正确地)拒绝遵守安全原因的请求。
我当然不太可能改变他们的代理设置。
我尝试在动作中添加以下内容:
[OutputCache(Duration = 0, Location = OutputCacheLocation.None, NoStore=true)]
以及:
Response.Cache.SetNoTransforms();
但问题仍然存在。
我是否可以设置其他任何HTTP标头来指示代理停止修改内容?制作这些代理的任何其他方式都有效吗?或者浏览器中是否有任何可能正在执行此操作的内容?
更新:自写这篇文章以来,来自同一家公司的另外两个不同的用户现在正在产生这些错误,这增加了我的代理理论。