我将页面从网页表单页面(profile.aspx)重定向到 MVC 视图(signin.aspx)。在 MVC 控制器中,我必须[ValidateAntiForgeryToken]
获取令牌信息,但是当我提交 MVC 视图时,我收到“未提供所需的防伪令牌或无效”消息。如果我删除[ValidateAntiForgeryToken]
,则不再有错误消息,但我会丢失我的令牌信息。我确实需要所有这些令牌信息进行验证。那么我该如何解决这种问题呢?谢谢。
问问题
2517 次
1 回答
1
在您看来,在您声明<form>
需要使用 @Html.AntiForgeryToken() 帮助程序的地方。
@using (Html.BeginForm()) {
Html.AntiForgeryToken()
// The rest of your code
<div class="something">
@Html.DisplayFor(m => m.Whatever)
</div>
// etc...
}
这会将防伪令牌传递回您的控制器。
更新:您遇到的问题是您正在执行重定向。当你这样做时,所有的价值都会丢失。不清楚的是您为什么要从一个页面重定向到另一个页面。通常在 MVC 中,如果用户未通过身份验证或会话过期,则会重定向到 login.aspx 页面。如果您的 Signin.aspx 在其中,AccountController
则 Signing.aspx 和 AccountController 都应标记为防伪。但是,如果用户在 Signin.aspx 中,那么在内部您只是调用return RedirectToAction("Profile", "WhateverController");
您的信息将会丢失并且WhateverController
会失败,因为 Profile 操作不会收到防伪信息。
您的登录过程应该做一些事情,重定向到 Profile 的 HTTP GET 版本,让用户完成表单输入并将其提交到 Profile 的 HTTP POST 版本。这样您的数据将被保存,并且防伪令牌将成功到达。
于 2013-06-25T19:28:51.410 回答