C# IIS两次调用HttpModule的BeginRequest。是虫子吗? 台阶 创建空的干净ASP.NET Web应用程序-“MyApp”。取消选择所有选项
创建HttpModule-“MyHttpModule”(通过MSDN示例):C# IIS两次调用HttpModule的BeginRequest。是虫子吗? 台阶 创建空的干净ASP.NET Web应用程序-“MyApp”。取消选择所有选项,c#,asp.net,.net,iis,web,C#,Asp.net,.net,Iis,Web,创建HttpModule-“MyHttpModule”(通过MSDN示例): 不是favicon.ico的事 问题: 为什么单个http请求的事件处理程序被调用了两次? 使用IIS启动任何低级http请求处理的风险有多大?(这不仅仅是日志记录) PS: 上网后,我想这是IIS漏洞。我错了吗? 当然,对于http请求的低级别处理和最大性能,最好自行托管应用程序或使用一些准备好的组件集(如Katana)自行托管。 但我想知道IIS是否可以安全地扩展这些东西?因为我对它有一种不好的感觉,因为现在它告
但我想知道IIS是否可以安全地扩展这些东西?因为我对它有一种不好的感觉,因为现在它告诉我远离http级别,只需登录那里并仅使用IIS配置。当您访问“/”时,IIS默认文档模块会将其解析为其中一个文件。我想这就是为什么你的模块被调用了两次。你能试着简单地访问某个文件而不是“/”吗?任何文件都会触发您的模块两次?是的,在我将index.html添加到我的站点后,模块会被触发3次:1次用于“.index.html”,2次用于“/”。如果导航到“/index.html”,则“/index.html”模块会触发一次。结果如何?我不能确定HttpRequest的HttpModule会执行一次,因为每个文件执行一次?我试图了解整个情况。整个情况是你需要完全理解内部管道。我想不起网上有什么好的公开文档,但应该有关于这方面的书籍。如果请求返回到管道,则可以重新输入模块。
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();
}
}
app.BeginRequest -= ProcessBeginRequest;
app.BeginRequest += ProcessBeginRequest;