Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IIS两次调用HttpModule的BeginRequest。是虫子吗? 台阶 创建空的干净ASP.NET Web应用程序-“MyApp”。取消选择所有选项_C#_Asp.net_.net_Iis_Web - Fatal编程技术网

C# IIS两次调用HttpModule的BeginRequest。是虫子吗? 台阶 创建空的干净ASP.NET Web应用程序-“MyApp”。取消选择所有选项

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是否可以安全地扩展这些东西?因为我对它有一种不好的感觉,因为现在它告

创建HttpModule-“MyHttpModule”(通过MSDN示例):

  • 不是favicon.ico的事
  • 问题: 为什么单个http请求的事件处理程序被调用了两次?

    使用IIS启动任何低级http请求处理的风险有多大?(这不仅仅是日志记录)

    PS: 上网后,我想这是IIS漏洞。我错了吗? 当然,对于http请求的低级别处理和最大性能,最好自行托管应用程序或使用一些准备好的组件集(如Katana)自行托管。
    但我想知道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;