c# - HTTP 模块中的响应修改

标签 c# asp.net httpmodule

我在 C# 中构建了一个 http 模块,它只覆盖生命周期的 EndRequest,检查响应 header 的状态代码并在需要时修改响应代码。像这样的东西:

HttpContext context = ((HttpApplication)source).Context;
if (context.Response.StatusCode == 200)
{
    context.Response.StatusCode = 404;
}

当我针对本地主机(真正的 IIS)测试它时,这对我来说似乎工作正常,但是当我启用 Intranet 访问并从另一台计算机进行测试时,它每次都失败。

我通过另一台计算机测试时看到的错误是:

“服务器无法在发送 HTTP header 后设置状态。”

我还注意到两次请求同一个文件,而在本地它只请求一次文件。我听到有人说了一些关于输出缓冲的事情,但我也尝试将 on BeginRequest 响应 OutputBuffer 设置为 true 并得到相同的结果。

想法?

最佳答案

您需要在发送 header 之前修改响应。我从来没有这样做过,但我猜正确的事件应该是 PreSendRequestHeaderslink

Here's an example在此事件中设置 header 。

如果此事件对您不起作用,请在管道中的处理程序后处理之后检查一些事件:http://blogs.msdn.com/b/carloc/archive/2007/12/19/application-page-and-control-lifecycle.aspx不过要小心,因为您可能必须为 IIS 7 集成管道重写代码。

关于c# - HTTP 模块中的响应修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6393054/

相关文章:

c# - 如何在具有负值的 Chart.js 中的 Yaxis 上隐藏 0 值

asp.net - 文件上传在 jQuery UI 对话框中不起作用

ASP.NET:将内容注入(inject)所有响应流

c# - 如何在 vNext 依赖注入(inject)中创建构造函数订阅

c# - Oracle 客户端与基于任务的异步模式(异步/等待)

c# - 在 asp 按钮单击事件中访问 Html TextBox 控件?

c# - 如何限制 HttpModule 每个请求只能调用一次?

c# - 无法加载文件或程序集 'msshrtmi' 或其依赖项之一(Azure 表存储访问)

C# RSACryptoServiceProvider ToXmlString()/FromXmlString() 方法

c# - 从 UserControl 实例化 Form 是不好的做法吗?