3

我正在用 C# 创建一个 Web 应用程序。

当我的页面加载时,我会触发一个异步线程来处理一些数据。此处理的一部分是更新 cookie。但是,当我将 cookie 保存到响应时

System.Web.HttpContext.Current.Response.Cookies.Add(cookie),我得到以下异常:

HttpException: Server cannot modify cookies after HTTP headers have been sent.

有什么办法可以解决或解决这个问题?

4

3 回答 3

4

除非您有充分的理由,否则您不应该在 ASP.NET 请求中启动后台工作线程。最终,在将响应发送回浏览器之前,您仍然必须等待该线程完成其工作。

听起来响应流已经被部分写入,然后您的线程正在尝试添加 cookie。

我会在这里重新考虑您的策略并阅读以下指南:

第 6 章 — 提高 ASP.NET 性能 - 线程指南

它看起来像一个过时的文件,但原则仍然有效。如果调用数据处理器的原因是为了防止 ASP.NET 工作线程因为数据处理器长时间运行而阻塞和耗尽资源,那么请考虑将页面设置为异步页面

于 2011-03-31T23:34:41.920 回答
1

是的,Cookie 是 http 响应的一部分,在异步操作中,在生成响应并将其发送到浏览器后,您无法更改任何内容。

为了解决这个问题,我建议在浏览器上构建一个 ajax 循环以获得异步操作结果。操作完成后,您可以返回带有 ajax 响应的 cookie。

于 2011-03-31T23:38:13.410 回答
0

如果它在 preinit 或 init 中怎么办?不确定这是否会有所帮助。 http://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events

于 2011-03-31T23:34:27.650 回答