Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
ASP.NET(经典):处理所有请求(包括非托管请求)的自动注册Httpmodule_Asp.net_Httpmodule - Fatal编程技术网

ASP.NET(经典):处理所有请求(包括非托管请求)的自动注册Httpmodule

ASP.NET(经典):处理所有请求(包括非托管请求)的自动注册Httpmodule,asp.net,httpmodule,Asp.net,Httpmodule,我已经创建了一个定制的HttpModule,并且我正在尝试确保它被自动注册(这样,如果你想的话,用户就不必求助于\Well(如果我在这里出错,请纠正我),asp.net应用程序代码将仅为托管请求运行,因此,在这种情况下,如果主asp.net应用程序代码未被执行,则模块将不会运行似乎是合乎逻辑的。我认为这里的区别在于,您将模块作为应用程序本身的一部分,而不是IIS管道的一部分。但我不能100%确定这是否正确确切的原因(因此评论,而不是回答)嗯…对此不确定…毕竟,iis是在集成模式下使用的(只有一个

我已经创建了一个定制的HttpModule,并且我正在尝试确保它被自动注册(这样,如果你想的话,用户就不必求助于\Well(如果我在这里出错,请纠正我),asp.net应用程序代码将仅为托管请求运行,因此,在这种情况下,如果主asp.net应用程序代码未被执行,则模块将不会运行似乎是合乎逻辑的。我认为这里的区别在于,您将模块作为应用程序本身的一部分,而不是IIS管道的一部分。但我不能100%确定这是否正确确切的原因(因此评论,而不是回答)嗯…对此不确定…毕竟,iis是在集成模式下使用的(只有一个管道…),就像我说的,我不太清楚,但对我来说,线索来自您必须添加
runAllManagedModulesForAllRequests=“true”的事实
以使基于代码的版本正常工作。对我来说,这表明模块仅针对托管请求(由应用程序提供服务)运行除非您明确命令将托管代码模块用于所有请求。这可能会在所有情况下注入模块,而不仅仅是由托管代码提供服务的模块。是的,只有一个管道,但管道的整个要点是您可以截获请求并在管道中的不同点提供服务。因此,可能不会托管请求由不同的部分提供服务。当我有时间时,我可能会进一步深入了解这一点,更好地理解它可能会很有用,只需添加更多反馈(基于@rick strahl的回答)。通过web.config注册是一项“iis功能”,而通过代码进行动态注册是asp.net的一项功能…由于Premission属性是IIS的一部分,因此在通过应用程序启动前方法注册模块时,似乎无法配置该属性(尽管可以通过直接写入web.config文件或使用IIS管理工具来实现——但还没有测试过)如果您仔细想想(如果我在这里有错,请纠正我),asp.net应用程序代码将仅为托管请求运行,因此,在这种情况下,如果主asp.net应用程序代码未被执行,则模块将不会运行似乎是合乎逻辑的。我认为这里的区别在于,您将模块作为应用程序本身的一部分,而不是IIS管道的一部分。但我不能100%确定这是否正确确切的原因(因此评论,而不是回答)嗯…对此不确定…毕竟,iis是在集成模式下使用的(只有一个管道…),就像我说的,我不太清楚,但对我来说,线索来自您必须添加
runAllManagedModulesForAllRequests=“true”的事实
以使基于代码的版本正常工作。对我来说,这表明模块仅针对托管请求(由应用程序提供服务)运行除非您明确命令将托管代码模块用于所有请求。这可能会在所有情况下注入模块,而不仅仅是由托管代码提供服务的模块。是的,只有一个管道,但管道的整个要点是您可以截获请求并在管道中的不同点提供服务。因此,可能不会托管请求由不同的部分提供服务。当我有时间时,我可能会进一步深入了解这一点,更好地理解它可能会很有用,只需添加更多反馈(基于@rick strahl的回答)。通过web.config注册是一项“iis功能”,而通过代码进行动态注册是asp.net的一项功能…由于Premission属性是IIS的一部分,因此在通过应用程序启动前方法注册模块时,似乎无法配置该属性(虽然可以通过直接写入web.config文件或使用IIS管理工具来实现,但尚未测试)
[assembly: PreApplicationStartMethod(typeof(AutoRegisterHttpModule), nameof(AutoRegisterHttpModule.Start))]
public static class AutoRegisterHttpModule {
    public static void Start() {
        HttpApplication.RegisterModule(typeof(GrmMagickModule));
    }
}
<modules>
 <add type="Grm.Magick.Resizing.GrmMagickModule, Grm.Magick.Resizing" name="GrmMagick"/>
</modules>
<modules runAllManagedModulesForAllRequests="true"></modules>