gpt4 book ai didi

c# - 带有 ViewModel 和两个表单的页面上的 "The anti-forgery cookie token and form field token do not match"

转载 作者:行者123 更新时间:2023-11-30 18:25:49 25 4
gpt4 key购买 nike

在 Mono 上运行的 MVC4 应用程序中出现错误:

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

在“登录和注册”页面上。此页面有一个 LoginOrRegisterViewModel,如下所示:

public class LoginOrRegisterViewModel
{
public LoginModel Login { get; set; }
public RegisterModel Register { get; set; }
}

通过 GET 请求传递给页面。

页面上有两个 Html.BeginForms(),一个是 Login 表单,一个是 Register 表单。第一个调用 Controller 上的 Login 操作,第二个调用 Register 操作。这两个操作都有一个 ValidateAntiForgeryToken 属性。提交表单时,分别从 LoginOrRegisterViewModel 获取 LoginRegister

当页面加载并且注册用户在一段时间(几个小时?)后尝试登录时,“登录和注册”页面最初显示,但是当提交 Login 表单时出现上述错误显示直到根页面被刷新。

我在 Web.config 中包含了一个机器 key ,并在两种形式中都添加了 Html.AntiForgeryToken()。我怀疑这个错误可能与两种形式和 View 模型有关。

有谁知道如何修复错误?谢谢。

最佳答案

MVC 最佳编码标准,始终实践代码关注点分离。

  • 为 LoginViewModel 创建两个不同的模型 1,为 Register View 模型创建 2。
  • 通过 Partial 或 RenderAction 关键字为登录和注册和访问创建单独的局部 View 。

如果你将 @Html.AntiForgeryToken() 放在你的 html 表单上,那么你需要通过编写属性 [ValidateAntiForgeryToken()] 来验证 Controller 端方法的防伪造 .

Html 助手将在您的表单中生成唯一的 token ,例如,

<input name="__RequestVerificationToken" type="hidden" value="4dvPVQIvpXNEKZyV1DCjeN1rmtMDJ9fQ2">

对于每个表单,将生成唯一的防伪 token ,它将解决您的冲突。

如果您仍然遇到困难,请告诉我。

关于c# - 带有 ViewModel 和两个表单的页面上的 "The anti-forgery cookie token and form field token do not match",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29591925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com