asp.net-mvc-2 - 仅当调试器运行时防伪 token 异常

标签 asp.net-mvc-2 iframe visual-studio-2005 debugging antiforgerytoken

我有一个 mvc2 应用程序,它通过 iframe 提供内容。 iframed 页面只是一个表单。它有一个请求验证 token 。在开发人员使用 Visual Studio 2005 调试器之前,一切都可以跨域正常运行。一旦他们这样做,我就会收到以下错误详细信息。

Exception: 
System.Web.Mvc.HttpAntiForgeryException : A required anti-forgery token was not supplied or was invalid.

Stack Trace:
at System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext) 
at System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor) 
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)

Source:
System.Web.Mvc  

Location:
Void OnAuthorization(System.Web.Mvc.AuthorizationContext)

Url:
https://mydomain.com/Portal/Framed/NewQuickPay/yFkYAA!!-OSlvtw!!-4f560479-96f2-4578-8804-a757d4913f52


Path:
D:\Inetpub\wwwroot\Portal\

Referrer:
https://mydomain.com/portal/Framed/Index/yFkYAA!!-OSlvtw!!-4f560479-96f2-4578-8804-a757d4913f52/?amount=2861.43


Server Name:
/* OMITTED */   

IP Address:
/* OMITTED */

User Agent:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDR; .NET4.0C; .NET CLR 1.1.4322)

Is Authenticated:
False   

Http Method:
POST

Form Data
/* OMITTED */

__RequestVerificationToken  EoJfaqoiWFUnbJFIQQeXoCeUdtVKpfX7RB0LfUXoTzRbrwK3ZYr6ZjT2ldsNGqVuB+3Vtc3uiRZoJiF+VAi7v7kdEy/sCb6jI9stzTzz/hRh3emTzBh61W9+GkFlEkxEVID8Bg==

Cookies
/* NONE */

我们已经删除了所有cookie,重新启动了机器,重新启动了Visual Studio,但调试器仍然导致此错误。

我已将声明的机器 key 添加到 web.config 中。我不确定还可能是什么。仅当调试器运行且使用 Visual Studio 2005 时才会发生这种情况。

最佳答案

我找到了答案。我的内容是通过跨域 iframe 呈现的。根据Adam Young ,除非您在 header 中定义 P3P 策略,否则 IE 将自动阻止第三方 cookie。

我添加了代码,将 p3p 策略注入(inject) header ,然后从 iframe 中使用的每个操作中调用它。到目前为止,我们还没有看到这个错误出现。我希望这个解决方案对其他人有帮助。

public static void SetP3PCompactPolicy()
{
    HttpContext.Current.Response.AddHeader("p3p", 
    "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
}

我还定义了一个 machine key ,尽管我不确定这是必要的。

关于asp.net-mvc-2 - 仅当调试器运行时防伪 token 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5304056/

相关文章:

javascript - 使用 Jquery 从 iframe 中的子访问父窗口滚动事件

asp.net - 在ASP.NET MVC C#中使用Cookie

asp.net-mvc - 为什么我的 Web 部署项目会从我的 MVC2 项目中删除 .ascx 文件?

jquery - Internet Explorer 和非常奇怪的 iFrame 行为案例

ios - (响应)表格宽度不适合 ios safari 上 iframe 内的容器

c++ - Visual C++ 2008 和 2005 之间的区别

c# - 从 .Net 中的 SAS 数据源读取数据

com - 使用 COM 服务器的并排错误,安装了 C++ 可再发行组件

asp.net-mvc-2 - ASP.NET MVC 3 - 自定义 SEO 友好路线

asp.net-mvc-2 - 多个 ActionResults 返回相同的 View ?或者更好的方法?