MVC3:未提供所需的防伪令牌或无效

时间:2013-06-25 19:15:22

标签: asp.net-mvc-3

我将网页从网页表单页面( profile.aspx )重定向到MVC视图( signin.aspx )。在MVC控制器中,我有[ValidateAntiForgeryToken]来获取令牌信息,但是当我提交MVC视图时,我得到'未提供所需的防伪令牌或无效'消息。如果我删除[ValidateAntiForgeryToken],则不会再显示错误消息,但我丢失了令牌信息。 我确实需要所有这些令牌信息进行验证。那么我该如何解决这类问题呢? 感谢。

1 个答案:

答案 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版本。这样就可以保存您的数据,并且防伪令牌将成功到达。