c# – ASP.NET MVC 3网站防伪标记仅在IE上失败

前端之家收集整理的这篇文章主要介绍了c# – ASP.NET MVC 3网站防伪标记仅在IE上失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的MVC 3项目中,我有一个登录页面,它使用MVC 3中内置的防伪逻辑.

在Firefox& Opera它运行得很好,但在IE上我得到了这个:

A required anti-forgery token was not supplied or was invalid.

我真的难以理解为什么只有IE遭受这种情况,我检查了cookie设置,它们设置与其他浏览器相同,所以我在这里迷路了.

当我使用反伪造代码时,我同时使用SALT和域检查(这应该不重要,但值得一说).

这是视图代码

@model login.Models.logonModel

@{
    ViewBag.Title = "Log On";
}

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

<script type="text/javascript">
$(function () {
    //focus on form.
    $("#UserName").focus();
});
</script>

 @using (Html.BeginForm("logon","Account",FormMethod.Post,new { @class = "form login" })) {
@Html.AntiForgeryToken("!@#Hq4(",ViewBag.AppDomain,"/")
<div id="Box">
<h1>Login</h1>
Please enter your username and password. @Html.ActionLink("Register","Register") if you don't have an account.
<div class="block" id="block-login">
    <h2>
        Login Form</h2>
    <div class="content login">
              @Html.ValidationSummary(true)
        <div class="group buffer">
            <div class="left">
                <label class="label right">
                    @Html.LabelFor(m => m.UserName)</label>
            </div>
            <div class="right">
                @Html.TextBoxFor(m => m.UserName,new { @class = "text_field" })
                @Html.ValidationMessageFor(m => m.UserName)
            </div>
        </div>
        <div class="group buffer">
            <div class="left">
                <label class="label right">
                    @Html.LabelFor(m => m.Password)</label>
            </div>
            <div class="right">
                @Html.PasswordFor(m => m.Password,new { @class = "text_field" })
                @Html.ValidationMessageFor(m => m.Password)
            </div>
        </div>
        <div class="group buffer">
            <div class="left">
                <label class="label right">
                    @Html.LabelFor(m => m.RememberMe)</label>
            </div>
            <div class="right">
                @Html.CheckBoxFor(m => m.RememberMe)
            </div>
        </div>
        <div class="group navform buffer">
            <div class="right">
                <button class="button" type="submit">
                    <img src="@Url.Content("~/Content/images/icons/key.png")" alt="Save" />
                    Login
                </button>
            </div>
        </div>
    </div>
</div>
</div>
}

ViewBag.AppDomain是来自web.config的值,可在测试和生产使用期间轻松设置.

如果我从防伪标签删除域和路径部分,它就可以正常工作.所以这两个中的一个必定是问题所在.

解决方法

使用自定义AntiCSRF令牌创建程序时,我遇到了类似的问题.我没有使用MVC3,但它可能是一个similer问题.

对我来说问题是我在本地用于测试网站的域名中有一个下划线.理论上,DNS名称不能有下划线(即使“计算机名称”可以),因此IE不保存cookie.

它可能不是同一个问题,但可能与测试环境以及IE浏览cookie的方式有关.

这是一篇非常有趣的文章,关于IE cookie处理的内部结构可能会帮助您发现问题.

http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx

猜你在找的C#相关文章