在Mono上运行的MVC4应用程序中出现错误:
防伪cookie令牌和表单字段令牌不匹配
登录和注册"页。此页面的LoginOrRegisterViewModel
如下所示:
public class LoginOrRegisterViewModel
{
public LoginModel Login { get; set; }
public RegisterModel Register { get; set; }
}
将哪些内容传递给GET请求中的页面。
页面上有两个Html.BeginForms()
,一个Login
- 表单和一个Register
表单。第一个调用控制器上的Login
操作,第二个调用Register
操作。这两个操作都具有ValidateAntiForgeryToken
属性。提交表单时,Login
或Register
分别从LoginOrRegisterViewModel
获得。
当页面加载并且注册用户尝试登录一段时间后(几个小时?)"登录和注册"页面最初显示,但是当提交Login
表单时,上面的错误会显示,直到刷新根页。
我在Web.config中添加了一个机器密钥,并在两个表单中添加了Html.AntiForgeryToken()
。我怀疑这个错误可能与两个表单和视图模型有关。
有谁知道如何修复错误?感谢。
答案 0 :(得分:0)
MVC最佳编码标准,始终以分离代码关注实践。
如果您在html表单上放置 @ Html.AntiForgeryToken(),那么您需要通过编写属性 [ValidateAntiForgeryToken()]来验证控制器端方法上的防伪。 。
Html帮助器将在您的表单中生成唯一的令牌,如
<input name="__RequestVerificationToken" type="hidden" value="4dvPVQIvpXNEKZyV1DCjeN1rmtMDJ9fQ2">
对于每个表单,将生成唯一的防伪标记,它将解决您的冲突。
如果您仍面临困难,请告诉我。