gpt4 book ai didi

asp.net-mvc-5 - 发送 HTTP header 后,服务器无法附加 header @Html.AntiForgery 处的异常

转载 作者:行者123 更新时间:2023-12-03 00:31:59 32 4
gpt4 key购买 nike

我正在开发一个 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();
}

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

@Html.AntiForgeryToken()

以及它抛出的异常:

Server cannot append header after HTTP headers have been sent.

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

有人可以帮我吗,我该如何摆脱这个异常?

最佳答案

Response.Redirect(anyUrl) 状态代码设置为 302 时, header 将添加到响应中:

HTTP 1.0 302 Object Moved 
Location: http://anyurl.com

当执行 ViewResult 且 razor 渲染 View 时,Html.AntiForgeryToken() 将被调用,因此助手会尝试添加标题 X-Frame - 响应中的选项和一些cookie,这是异常的原因。

但不用担心,您可以禁止添加 X-Frame-Options header ,只需将此 AntiForgeryConfig.SuppressXFrameOptionsHeader = true; 放入 Application_start 中即可.

但我建议你改变这一点:

Response.Redirect(returnUrl);

return Redirect(returnUrl);

注意

由于 .NET 代码已打开,您可以了解 AntiForgeryToken 的工作原理,请参阅此处 AntiForgeryWorker .

关于asp.net-mvc-5 - 发送 HTTP header 后,服务器无法附加 header @Html.AntiForgery 处的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34270192/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com