14

ASP.NET メンバーシップ プロバイダーを使用して現在のユーザーの ID を取得するにはどうすればよいですか? 私のアプリケーションは Database First アプローチを使用する MVC 3 であるため、独自のデータベースを作成し、メンバーシップ プロバイダーとロール プロバイダーは私のテーブル (カスタム メンバーシップとロール プロバイダー) を使用しています。

私のページ (フィードバック) の 1 つで、ユーザーは私の Web サイトに関するフィードバックを送信できます。ユーザーが接続している場合は、挿入時にテーブルに UserID を含めたいと考えています。

しかし、ASP.NET メンバーシップは IIdentity であるため、アクセスできるのは名前だけです。名前を使用して 2 つのテーブル間にリンクを作成したくありません。ID が必要です。

では、この非常に単純なタスクのためにアプリケーションで何をしますか? つまり、接続ユーザーが値を挿入する必要があるほぼすべてのページで、ユーザー テーブルへの正しい外部キーを作成するためにユーザーの ID が必要ですよね? ちなみに、私はこの MVC フレームワークに非常に慣れていません。それ以前は ASP.NET aspx を使用していました。ユーザー情報については、必要に応じて現在の ID、名前、その他のフィールドを提供するセッションを使用していました。Session オブジェクトを使った実装は共有ホスティングで苦労したので、本当のメンバーシップを使いたいと思っています。

ありがとう!

編集

必要な ID は整数でなければなりません (実際、User テーブルにある UserID フィールドが必要です)。

4

6 に答える 6

31

これを試して;

MembershipUser mu = Membership.GetUser("username");
string userId = mu.ProviderUserKey.ToString();

現在ログインしているユーザーの場合、ユーザー名を渡さなくても使用できます。

string userId = Membership.GetUser().ProviderUserKey.ToString();
于 2012-10-31T13:33:17.647 に答える
4

Identity 2.0 の UserId を取得する方法を共有したいと思います。

string UserId = System.Web.HttpContext.Current.User.Identity.GetUserId();
于 2014-12-22T21:45:22.183 に答える
0

私は同様の問題に遭遇しました。私は(他の理由でも)、他のすべてのコントローラーが継承する基本コントローラークラスを作成しました。基本クラスにユーザーの情報を保持させて、いつでも使用できるようにすることができます。

于 2012-10-31T13:33:06.763 に答える
0

web.configでプロバイダーに対してすべてが正しく構成されていると仮定し、ユーザー名を取得できるため、次のことをお勧めします。

Dim muser As MembershipUser = Membership.GetUser(userName)

MembershipUserオブジェクトの詳細は次のとおりです。http://msdn.microsoft.com/query/dev10.query?appId = Dev10IDEF1&l = EN-US&k = k%28SYSTEM.WEB.SECURITY.MEMBERSHIPUSER%29 ; k%28TargetFrameworkMoniker-%22 .NETFRAMEWORK%2cVERSION%3dV4.0%22%29; k%28DevLang-VB%29&rd = true

利用可能な名前以外の多くのプロパティ。必要なIDフィールドは「ProviderUserKey」と呼ばれます

于 2012-10-31T13:33:44.610 に答える
0

これはあなたの後ですか?

asp.netメンバーシップ認証のユーザーID?

個人的には、ユーザー名とアプリケーションで必要なカスタム データによってこれらの詳細を取得することをカプセル化する独自のクラスがあります。

よろしく

于 2012-10-31T13:40:32.253 に答える
0

現在のユーザーIDを取得するには、次を試すことができます

string currentUserId= Convert.ToString(Membership.GetUser().ProviderUserKey);
于 2014-04-09T14:07:33.830 に答える