我试图通过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。感谢。
答案 0 :(得分:2)
如果您正在使用任何客户端组件,例如Uploadify,Plupload,则组件可能不会根据请求发送身份验证和会话Cookie。这里有一个很好的解释workaround。
答案 1 :(得分:0)
构建的默认ASP.NET应用程序使用cookie通过session-id对用户进行身份验证,而session-id是在cookie本身中编写的,而我认为它应该是处理此问题的会话对象。因此,默认创建的MVC应用程序不安全。您最好将源代码更改为使用会话。 对于您的问题,从用户类获取用户名可能不是一个好选项,因为它将返回一个空字符串。如果使用会话,则在使用会话对象中的标识后,将解决此问题。