2013-06-25 50 views
1

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

回答

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将失败,因为配置文件操作未收到防伪信息。

您的登录过程应该做一些事情,重定向到HTTP GET版本的配置文件,让用户完成表单条目并将其提交给HTTP POST版本的配置文件。这样您的数据将被保留,并且防伪令牌将成功到达。

+0

我已经把它放在我的视野里了。 – howexg9

+0

查看我的更新。另外,你是否可以扩展你的问题来清楚地解释你的过程?哪个控制器处理profile.aspx时,重定向到哪里你确切地重定向?同一控制器?不同的控制器 –

+0

那么如何保存所有令牌信息?或者在它重定向到MVC之后,我如何从MVC获取所有令牌信息?谢谢。 – howexg9

相关问题