2013-06-25 81 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

相關問題