【问题标题】:ASP.NET MVC The required anti-forgery form field __RequestVerificationToken is not presentASP.NET MVC 所需的防伪表单字段 __RequestVerificationToken 不存在
【发布时间】:2016-09-10 01:45:44
【问题描述】:

我在登录表单中收到此错误:

所需的防伪表单字段“__RequestVerificationToken”不存在

我使用的是用 Visual Studio 2015 模板生成的 ASP.NET MVC 默认项目。

登录.cshtml:

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.AntiForgeryToken()
    ...
}

帐户控制器:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    ...
}

web.config 中的机器密钥定义:

<machineKey validationKey="6237432C07086CE1A8FAAD3CC71A3AC1DE0B22DE9061D7CAF798E5B18E6E888D7A3F88004D0A928952CB81598ED565B26F8175E30294B1F5A1F3220229163F1C" 
    decryptionKey="E61A22E8DEE09CB4640B2863705CE6BC95E64C8797CAB8CAE7463BE7F9AB1B94" 
    validation="SHA1" 
    decryption="AES" />

生成的 HTML 页面:

<form action="/Account/Login" class="form-horizontal" method="post" role="form">
<input name="__RequestVerificationToken" type="hidden" value="Ei4E03S5nvvdR9N2KJg8aGDQK9fI3xbBJLJzT3z3c7QAyyxbGf11ncmTAiD-8itHoKWYuNNghOsmyTS2hBDlmkv7Ttk1" />

我的浏览器中有一个名为 __RequestVerificationToken 和值 qM5XwYIQiiHk2lumHWcXHOPPji2VptN95X0FDLneyXSN3_sGrF6fe7zt8KHC5MjopQoBh9sJl5vEJLGOAzy1h-8R-nk1 的 cookie,在会话结束时过期:When the browsing session ends

在本地使用IIS Express 不会发生此错误,但是在我将项目部署到服务器后,发生了此错误。

清除 cookie 并重新启动浏览器并没有解决问题。

有什么想法吗?

编辑:

我从控制器和视图中删除了防伪令牌并发现了一些奇怪的东西:表单提交数据没有任何问题,但在提交和验证之间的某个地方,所有字段都变为空或空。 __RequestVerificationToken 在验证之前变为空,这会导致问题。现在我正在调查这个新问题:(

【问题讨论】:

  • 请向我们展示您向服务器发送的请求。右键单击页面检查元素 -> 网络选项卡

标签: c# asp.net-mvc asp.net-mvc-5 antiforgerytoken


【解决方案1】:

在您的 Web.config 中找到 &lt;httpCookies requireSSL="true" /&gt;property 并将其注释掉,或者将您的项目设置为始终使用 SSL。

【讨论】:

    猜你喜欢
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 2016-05-26
    • 2016-03-27
    • 2018-04-25
    • 2015-03-14
    相关资源
    最近更新 更多