防伪 cookie 令牌和表单字段令牌不匹配 - Orchard 1.8.1

The anti-forgery cookie token and form field token do not match - Orchard 1.8.1

我使用@Html.AntiForgeryTokenOrchard() 方法来呈现令牌。提交表单时出现此错误。该站点位于 Azure Web 上。当我使用原始站点名称 xxxx.azurewebsites.net 时,令牌有效。只有当我使用映射的域名时,我才会收到此错误。该错误与浏览器无关,但是如果我强制更新站点 (CTRL+F5) 和 post 表单,则令牌有效。如果我打开一个新的隐身浏览器 window 新会话再次失败。

我在 web.config 中配置了机器密钥。

请帮助我摆脱这个烦人的错误。任何帮助表示赞赏。 谢谢。

您不能在同一个表单上同时具有防伪和缓存功能,因为防伪令牌不可重复使用并且是响应的一部分。因此,您需要在它们之间做出选择。任何包含不可能伪造的信息的表格(几乎任何表格)都应该具有防伪功能。所以默认的解决方案应该是禁用缓存,在呈现表单的控制器操作上使用 [OutputCache] 属性。如果您更喜欢缓存而不是防伪造,现在可以逐个关闭防伪造功能,使用作为表单目标的操作的 [ValidateAntiForgeryTokenOrchard] 属性。 但同样,禁用缓存应该是首选。