加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-5 – 在@Html.AntiForgery发送HTTP标头后,服务器无

发布时间:2020-12-16 00:05:18 所属栏目:asp.Net 来源:网络整理
导读:我正在开发一个asp.net mvc 5应用程序,我试图通过应用下面的代码重定向到ReturnUrl: [HttpPost][AllowAnonymous]public ActionResult Login(UserLogin model,string returnUrl){ if (ModelState.IsValid) { string EncryptedPassword = GetMD5(model.Passwo
我正在开发一个asp.net mvc 5应用程序,我试图通过应用下面的代码重定向到ReturnUrl:
[HttpPost]
[AllowAnonymous]
public ActionResult Login(UserLogin model,string returnUrl)
{
    if (ModelState.IsValid)
    {
        string EncryptedPassword = GetMD5(model.Password);
        if (DataAccess.DAL.UserIsValid(model.Username,EncryptedPassword))
        {
            FormsAuthentication.SetAuthCookie(model.Username,true);
            if (String.IsNullOrEmpty(returnUrl))
            {
                return RedirectToAction("Index","Home");
            }
            else
            {
                Response.Redirect(returnUrl);
            }
        }
        else
        {
            ModelState.AddModelError("","Invalid Username or Password");
        }
    }
    return View();
}

上面的代码工作正常,但问题是当我发布登录表单时,它给了我一个我以前从未遇到过的异常,我很难解决在Login.cshtml视图中生成的异常,在线:

@Html.AntiForgeryToken()

它抛出的异常:

Server cannot append header after HTTP headers have been sent.

我研究了很多,但我无法得出结论.当我删除@ Html.AntiForgeryToken()行时,我的应用程序工作正常,但我不想这样做,我希望我的应用程序保持跨站点请求保护.

任何人都可以帮助我,我如何摆脱这个例外?

解决方法

当Response.Redirect(anyUrl)的状态代码设置为302时,标题将添加到响应中:
HTTP 1.0 302 Object Moved 
Location: http://anyurl.com

当执行ViewResult并且razor呈现视图时,将调用Html.AntiForgeryToken(),因此帮助程序尝试将标题X-Frame-Options和一些cookie添加到响应中,这是异常的原因.

但是不要担心你可以抑制添加X-Frame-Options标头,只需把这个AntiForgeryConfig.SuppressXFrameOptionsHeader = true;在Application_start中.

但我建议你改变这个:

Response.Redirect(returnUrl);

return Redirect(returnUrl);

注意

自.NET代码打开后,您可以看到AntiForgeryToken的工作原理,请参见此处AntiForgeryWorker

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读