4

我有一个mvc2应用程序,它通过iframe提供内容。 iframed页面只是一个表单。它有一个请求验证令牌。在开发人员使用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 */ 

我们已经删除了所有的cookies,机器重新启动,重新启动Visual Studio中,并且仍然在调试器会导致这个错误。

我已经将声明的机器密钥添加到web.config。我不知道还有什么可以的。它只在调试器运行时发生,并且它们正在使用Visual Studio 2005.

+0

经过进一步调查,这个问题只发生在Windows 7上运行的IE浏览器。Chrome和Firefox都很好。 – Josh 2011-03-18 18:46:38

回答

4

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

我添加了代码,将p3p策略注入到头文件中,并从我在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,虽然我不知道这是必要的。

相关问题