以下是我的MVC 5应用程序中的场景:
我有一个包含@ Html.AntiForgeryToken()的登录表单 我有一个控制器,其中包含使用ValidateAntiForgeryToken
修饰的登录后期操作一切都按预期工作,除非我在IE中运行网站(在我的情况下为v.11)
我通过Fiddler运行请求,我注意到当我使用IE登录时,没有发送防伪cookie。
答案 0 :(得分:2)
这确实非常奇怪。这花了很多研究,但我终于找到了问题所在。显然,IE不接受来自包含下划线的URL的cookie。就我而言,这是一个仅用于开发和测试的临时URL。
我不确定这种行为的原因是什么,但在更改URL后,一切都按预期工作。
我以为我在这里分享我的发现。希望这可以挽救他们几个小时的生命:)
答案 1 :(得分:0)
就我而言,在 UI 表单验证后,如果请求是由 IE 发送的,我的控制器将无法验证防伪令牌。
失败代码示例:
<input type="submit" value="Submit" onclick="return validate();" />
我的 validate() 函数会根据验证条件返回真/假。因此,如果条件为真,则必须提交表单。它适用于除 IE 之外的任何地方。
出于某种原因,在输入验证后提交表单之前稍有延迟即可解决问题。
我将按钮更改为
<button onclick="submit();">
Submit
</button>
我的 submit() 函数:
var submit = function(){
if($("#form").validate()){
setTimeout(function(){
$("#form").submit();
}, 0);
}
}