我将网页从网页表单页面( profile.aspx )重定向到MVC视图( signin.aspx )。在MVC控制器中,我有[ValidateAntiForgeryToken]
来获取令牌信息,但是当我提交MVC视图时,我得到'未提供所需的防伪令牌或无效'消息。如果我删除[ValidateAntiForgeryToken]
,则不会再显示错误消息,但我丢失了令牌信息。
我确实需要所有这些令牌信息进行验证。那么我该如何解决这类问题呢?
感谢。
答案 0 :(得分: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的HTTP GET版本,让用户填写表单条目并将其提交到Profile的HTTP POST版本。这样就可以保存您的数据,并且防伪令牌将成功到达。