1

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

4

1 回答 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 回答