MVC 5 @Html.AntiForgeryToken() 生成具有空值的 html 标记



标题是不言自明的。帮助程序 Razor 标记基本上是按预期方式生成令牌 cookie,但不是正确的隐藏标记。 已经检查了语法,表单没有使用 AJAX,并且 cookie 显然是正确的,所以......

我宁愿冒险将这个问题标记为重复,也不愿在大海捞针之类的问题上花费数周时间。

视图:

@model model
@{
ViewBag.Title = "Title";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
//content
}

控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ControllerName([Bind(Include = "fields")] Class objectClass)
{
//content
}

标记:

<input name="__RequestVerificationToken" type="hidden" value="">

饼干:

name,value,domain,path,expires,httpOnly,secure
__RequestVerificationToken,5iRF4KpqPUPqnqRnlt74YrS99mOXW7Y-WcjKFOz3GmH3DmtuQPEHHAjm8vqZg9Z7P7F3rymZ2zojemQwJp0meq2etANdI5rm9n0RT7jjqCE1,localhost,/,Sessão,true,false

更新 1:

事实证明,这是因为jQuery而发生的。我怀疑这是由于与安装的版本 3.1.1(当前最新的稳定版本(不兼容。它在行 7958-7961 周围具有以下条件,这些条件强制删除了元素属性:

// If set returns undefined, fall back to normal setting
if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
this.value = val;
}

但最后我发现这种情况自 v1 以来一直存在,所以即使调试客户端代码,为什么它只发生在这个项目中仍然是一个错误。无论如何,感谢您的反馈。

起初我怀疑是jQuery 3.1.1以某种方式导致了它,但我没有注意到的是我已经停止使用我的Globalize.js捆绑包。基于其前提,Globalize 看起来像一个很棒的验证插件,但它有太多的依赖项,我当时没有,直到今天还找不到所有这些依赖项,即使检查了他们拥有的每个官方渠道我也能找到。

他们自己的依赖指南站点(查看完整版本(: https://johnnyreilly.github.io/globalize-so-what-cha-want/

最终破坏/删除我隐藏的AntiForgeryToken输入的是同时使用jQuery.validing和Globalize时的某种冲突。可能是因为缺少依赖项,但我想我永远不会知道,因为到目前为止我还没有真正看到同时使用两者(全球化所有功能(的工作系统。

我确实研究了文件排序,jQuery.validateglobalize,所有这些,顺便说一句。这么久,全球化。

希望这可以作为将来可能碰巧遇到同一问题的任何人的参考。

最新更新