ASP.NET Webforms模块,上下文用户为空

ASP.NET Webforms模块,上下文用户为空,asp.net,webforms,ihttpmodule,Asp.net,Webforms,Ihttpmodule,当视频请求由下面的HTTP模块代码(如/website/uploads/video/M2U00001_2.mp4)处理时,_context.User为空 当我在VS2010中使用Visual Studio Development server在本地计算机上运行此程序时,已设置了_context.User。部署到IIS 7.net 4.0后,context.User为Null http模块处理aspx页面时,“_context.User”不为Null,但在处理javascript、图像、视频或CS

当视频请求由下面的HTTP模块代码(如/website/uploads/video/M2U00001_2.mp4)处理时,_context.User为空

当我在VS2010中使用Visual Studio Development server在本地计算机上运行此程序时,已设置了_context.User。部署到IIS 7.net 4.0后,context.User为Null

http模块处理aspx页面时,“_context.User”不为Null,但在处理javascript、图像、视频或CSS时为Null

有人能解释为什么_context.User为null,以及确保_context.User不为null的可能解决方案吗

public Class VideoSecurityModule
    Implements IHttpModule

    Private WithEvents _context As HttpApplication

    Public Sub Dispose() Implements IHttpModule.Dispose

    End Sub

    Dim myUserManager As UserManager

    Public Sub Init(ByVal context As HttpApplication) Implements IHttpModule.Init
        _context = context
        myUserManager = New UserManager
    End Sub

    Public Sub OnAuthorizeRequest(ByVal source As Object, ByVal e As EventArgs) Handles _context.PostAuthenticateRequest
        Const networkAuthenticationRequiredStatusCode As Integer = 511
        Try

            If IsVideoUrl() Then

                If _context.User Is Nothing Then
                    LogManager.WriteMessage("_context.User is nothing:", "")
                End If
                Dim userId As Integer = myUserManager.GetUserIdByUserName(_context.User.Identity.Name)
                If (UserRequiresAuthorization(userId)) Then

                    If Not UserIsAssignedToCourseContainingVideo(userId) Then
                        LogAccessDeniedMessage()
                        _context.Response.StatusCode = networkAuthenticationRequiredStatusCode
                        _context.Response.ClearContent()
                        _context.Response.Write("UnAuthorized User")
                        _context.Response.End()
                    End If
                End If
            End If
        Catch ex As Exception
          LogManager.WriteException(ex, "")
        End Try
    End Sub
End Class
如果您实现IRequiresessionState接口,则该接口将包含所有会话信息。这也将为您提供用户信息

在下面的代码段中,您可以看到需要在代码中添加的内容

Public Class VideoSecurityModule
    Implements IHttpHandler
    Implements IRequiresSessionState 'You must add this line

    'You must add this function
    Public ReadOnly Property IsReusable() As Boolean
        ' IsReusable must be set to false since class has a member!
        Get
            Return False
        End Get
    End Property
End Class
要确保设置了_context.User,请将runAllManagedModulesForAllRequests=true添加到web.config的模块部分,如下所示

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
  <remove name="ScriptModule" />
  <remove name="RadUploadModule" />
  <remove name="RadCompression" />
  <remove name="VideoSecurityModule" />
  <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <add name="RadUploadModule" type="Telerik.Web.UI.RadUploadHttpModule" preCondition="integratedMode,runtimeVersionv2.0" />
  <add name="RadCompression" type="Telerik.Web.UI.RadCompression" preCondition="integratedMode,runtimeVersionv2.0" />
  <add name="VideoSecurityModule" type="LMS.VideoSecurityModule"/>
</modules>

谢谢你的回复。我添加了上面的接口和属性,但是_context.User仍然为null。你还有什么进一步的建议吗?