使用ASP.NET Generic Hanlder获取用户名

时间:2012-07-19 09:43:33

标签: c# asp.net vb.net generic-handler

我试图通过ASP.NET Generic Handler(.ashx)获取当前登录用户的用户名。但即使用户当前已登录,用户名也始终无效。

这是我的Generic Handler课程:

Imports System.Web.SessionState

    Public Class FileUploadHandler
    Implements System.Web.IHttpHandler
    Implements IRequiresSessionState

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

        'username is always null, i'm not sure why there's nothing eventhough the user is logged in     
        Dim username = context.Current.User.Identity.Name

        If String.IsNullOrEmpty(username) Then
            context.Response.StatusCode = 0
        Else
            context.Response.StatusCode = 1

        End If

    End Sub

    ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property

End Class

但我可以从任何页面获取登录用户的用户名:

Dim username = Context.Current.User.Identity.Name

你认为这是什么问题吗? 我同时使用C#和VB.NET。感谢。

2 个答案:

答案 0 :(得分:2)

如果您正在使用任何客户端组件,例如UploadifyPlupload,则组件可能不会根据请求发送身份验证和会话Cookie。这里有一个很好的解释workaround

查看Uploadify (Session and authentication) with ASP.NET

答案 1 :(得分:0)

构建的默认ASP.NET应用程序使用cookie通过session-id对用户进行身份验证,而session-id是在cookie本身中编写的,而我认为它应该是处理此问题的会话对象。因此,默认创建的MVC应用程序不安全。您最好将源代码更改为使用会话。 对于您的问题,从用户类获取用户名可能不是一个好选项,因为它将返回一个空字符串。如果使用会话,则在使用会话对象中的标识后,将解决此问题。