ASP.Net httpmodule私有属性是否表现为静态?

ASP.Net httpmodule私有属性是否表现为静态?,asp.net,properties,static,httpmodule,Asp.net,Properties,Static,Httpmodule,我在附于PostAuthenticateRequest的httpmodule中声明了一个私有属性,如下所示: Private Property roles as New List(Of Integer) roles.Add(AppSettings.AnonymousRoleId) Private Sub Application_PostAuthenticateRequest(ByVal source As Object, ByVal e As EventArgs)

我在附于PostAuthenticateRequest的httpmodule中声明了一个私有属性,如下所示:

Private Property roles as New List(Of Integer)
roles.Add(AppSettings.AnonymousRoleId)
       Private Sub Application_PostAuthenticateRequest(ByVal source As Object, ByVal e As EventArgs)
        ' A flag to prevent multiple execution on each request for static files like images, css, js
        If HttpContext.Current.Items("UserCheck") Is Nothing AndAlso _
        DirectCast(HttpContext.Current.Items("UserCheck"), String) <> "1" Then
            GlobalAppSettings.debug += 1
然后,在模块的各种方法中,我以这种方式向列表中添加了一个角色:

Private Property roles as New List(Of Integer)
roles.Add(AppSettings.AnonymousRoleId)
       Private Sub Application_PostAuthenticateRequest(ByVal source As Object, ByVal e As EventArgs)
        ' A flag to prevent multiple execution on each request for static files like images, css, js
        If HttpContext.Current.Items("UserCheck") Is Nothing AndAlso _
        DirectCast(HttpContext.Current.Items("UserCheck"), String) <> "1" Then
            GlobalAppSettings.debug += 1
但我有一种奇怪的行为。。。每次我刷新页面时,角色列表都会变长,总是添加相同的角色,就像每次页面刷新时都会记住私有属性角色一样。就像应用程序静态变量一样。
此属性不应该是模块的私有属性吗?

PostAuthenticateRequest事件可能会在每页调用多次。
看这里

好的,我做了一些其他的测试,我遇到了一个非常奇怪的行为

我尝试实现一个标志,如果模块已被读取至少一次,则跳过模块中的处理。我这样做只是在HttpContext.Current.Items中添加了一个标志var:

Private Property roles as New List(Of Integer)
roles.Add(AppSettings.AnonymousRoleId)
       Private Sub Application_PostAuthenticateRequest(ByVal source As Object, ByVal e As EventArgs)
        ' A flag to prevent multiple execution on each request for static files like images, css, js
        If HttpContext.Current.Items("UserCheck") Is Nothing AndAlso _
        DirectCast(HttpContext.Current.Items("UserCheck"), String) <> "1" Then
            GlobalAppSettings.debug += 1
私有子应用程序\u PostAuthenticateRequest(ByVal源作为对象,ByVal e作为事件参数)
'一个标志,用于防止对图像、css、js等静态文件的每个请求执行多次
如果HttpContext.Current.Items(“UserCheck”)为空,则_
DirectCast(HttpContext.Current.Items(“UserCheck”),字符串)“1”,然后
GlobalAppSettings.debug+=1
Debug是一个静态(vb共享)属性,我用于调试HttpModule。 现在,有了这段代码,每次页面刷新时调试变量应该是+1(我用一个简单的Response.Write(GlobalAppSettings.debug)在Default.aspx的代码后面进行检查)。 这是因为在应用程序\u PostAuthenticateRequest方法的末尾,我将HttpContext.Current.Items(“UserCheck”)设置为“1”

那么,为什么要在每个页面上以3或5的步骤刷新GlobalAppSettings.debug变量增量?
快把我逼疯了

好吧,我想我找到了所有问题的答案。 对HttpContext.Current.Items(“UserCheck”)的检查不起作用,因为对jpg、css、js的每个请求都会触发它自己的HttpContext,所以这样就没有使用全局标志

经过一番探索,我找到了一个更干净、更传统的解决方案。 如果您不希望在stati内容请求(包括页面中的静态资源)时触发模块,则必须在web配置中的以下部分中进行设置:

    <modules runAllManagedModulesForAllRequests="false">

您还必须向模块中添加属性:premission=“managedHandler”。示例:

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

出于某种原因,我的web.config中没有这些设置。
现在我遇到了另一个小问题,但现在我对正在发生的事情有了更好的了解,我想我应该打开一个关于这个主题的更具体的主题,那就是如何排除.axd处理程序(或者只是WebResources.axd处理程序)触发我的自定义模块,因为.axd处理程序是threated的,因为它具有先决条件,所以它具有托管代码=“integratedMode,runtimeVersionv4.0”,这就是它应该是的样子。我只是不想让我的模块从它或其他.axd中启动。

Ouch!这很伤脑筋……我不想对DB做任何事情,但我从cookies中读取并创建一个定制的IPrincipal,它相当复杂(具有角色、tak、路径的多应用程序)因此,我想在context.items中设置一个标志是一个好主意,以便在第一次之后跳过整个过程!因此我想所有HttpModule都会发生这种情况,它们在每次请求时都会被触发,即使是静态文件,如图像、css、js等?即使我将它们放在另一个域(如static.mysite.com)上?奇怪的是,没有办法排除s来自触发httpmodules的静态内容