1

ASP.NET Generic Handler(.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自体に書き込まれるセッションIDを介してユーザーを認証しますが、これを処理するのはセッションオブジェクトである必要があると思います。したがって、デフォルトで作成されたMVCアプリケーションをフォローするのは安全ではありません。代わりに、ソースコードをセッションを使用するように変更することをお勧めします。問題の場合、ユーザークラスからユーザー名を取得すると、空の文字列が返されるため、適切なオプションではない可能性があります。セッションを使用する場合、セッションオブジェクトのIDを使用すると、この問題は解決されます。

于 2012-07-19T09:54:16.850 に答える