创建HttpModule - " MyHttpModule" (通过MSDN示例):
using System;
using System.Web;
public class MyHttpModule : IHttpModule
{
public MyHttpModule() { }
public string ModuleName { get { return "MyHttpModule"; } }
public void Dispose() { }
public void Init(HttpApplication app)
{
app.BeginRequest += ProcessBeginRequest;
}
private void ProcessBeginRequest(object source, EventArgs e)
{
var ctx = ((HttpApplication)source).Context;
if (ctx.Request.Path == "/favicon.ico") { return; } // This stuff is handled automatically in current IIS version. So, I wrote this line just in case.
ctx.Response.Write("Processing request from: " + ctx.Request.Url + "<br />");
ctx.Response.Flush();
}
}
将其包含在web.config中:
<system.webServer>
<modules>
<add name="MyHttpModule" type="MyHttpModule, MyApp"/>
</modules>
</system.webServer>
运行应用
浏览器显示BeginRequest
侦听器已被触发两次
单个http请求:
LogRequest
事件侦听器按预期执行。但这不是http处理工作的正确名称监听器像这样的变化没有结果:
app.BeginRequest -= ProcessBeginRequest;
app.BeginRequest += ProcessBeginRequest;
为什么单个http请求的事件处理程序被调用了两次?
使用IIS启动任何低级别http请求处理有多大风险? (这不仅仅是记录)
PS: 浏览互联网后,我认为这是IIS漏洞。我错了吗? 当然,对于http请求的低级处理和最大性能,最好自我托管应用程序或使用一些准备好的组件来自我托管像Katana。 但我想知道IIS是否可以安全地扩展这些东西?因为我对它有一种不好的感觉,因为现在它告诉我不要超出http级别,只做日志并只使用IIS配置。