1

我正在尝试通过 ASP.NET 通用处理程序(.ashx)获取当前登录用户的用户名。但是即使用户当前已登录,用户名也始终是空的。

这是我的通用处理程序类:

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 都很好。谢谢。

4

2 回答 2

2

如果您正在使用任何客户端组件,例如UploadifyPlupload,则可能是该组件未随请求发送身份验证和会话 cookie。这里有一个很好的解决方法的解释。

使用 ASP.NET查看Uploadify(会话和身份验证)

于 2012-07-19T11:19:40.217 回答
0

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

于 2012-07-19T09:54:16.850 回答