如何将webresource.axd排除在启动自定义httpmodules之外



我整天都在网上搜索,但什么也没有发现。在我的web.config中,我设置了:

<modules runAllManagedModulesForAllRequests="false">

<add name="MyModule" type="namespace.to.MyModule" preCondition="managedHandler" />

这阻止了mymodule(在此示例中挂在后瓦特雷奎斯)无法在图像,CSS,JS等静态资源上发射。但是该模块仍由页面内部的.axd文件释放,尤其是从webresource.axd

触发的。

我在我的httpmodule中添加了此检查,并且有效:

            ' Skip the module for non aspx requests like .axd or url without default document
     Private Sub Application_PostAuthenticateRequest(ByVal source As Object, ByVal e As EventArgs)
        Dim request = DirectCast(source, HttpApplication).Request
        If request.CurrentExecutionFilePathExtension.ToLower <> ".aspx" Then
            Exit Sub
        End If

这被挂在后雷奎斯特。如果您挂钩其他事件,例如OnendRequest,请当心您可以访问httpcontext而不是httpapplication,因此请添加此信息:

  Protected Overridable Sub OnEndRequest(context As HttpContext)          
  ' Skip the module for non aspx requests like .axd or url without default document
        Dim request = context.Request
        If request.CurrentExecutionFilePathExtension.ToLower <> ".aspx" Then
            Exit Sub
        End If

还请注意,当无文档调用URL时,例如http://www.yoursite.com iis iis tiggers触发请求http://www.yoursite.com/default.aspx(或您设置的任何DEF文档)。因此,即使您的页面为空,您也会触发2个请求。IIS网站指出:"对于默认文档请求,第一个请求是到无扩展的URL。因此,IIS在初始请求处理过程中未运行任何标记为托管处理程序的托管模块。"但这不是真的。即使使用我的httpmodule标记为属性先决条件=" managedhandler",并带有http://www.yoursite.com/之类的请求,它仍然被两次触发(一个用于/for/default.asp)。无论如何,在这里发布的解决方法也解决了。

最新更新