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フィールドが必要です)。
これを試して;
MembershipUser mu = Membership.GetUser("username");
string userId = mu.ProviderUserKey.ToString();
現在ログインしているユーザーの場合、ユーザー名を渡さなくても使用できます。
string userId = Membership.GetUser().ProviderUserKey.ToString();
Identity 2.0のUserIdを取得する方法を共有したいと思います。
string UserId = System.Web.HttpContext.Current.User.Identity.GetUserId();
私は同様の問題に遭遇しました。私は(他の理由でも)、他のすべてのコントローラーが継承する基本コントローラークラスを作成しました。いつでも使用できるように、基本クラスにユーザーの情報を保持させることができます。
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」と呼ばれます
これはあなたの後に何でしょうか?
個人的には、ユーザー名とアプリケーションで必要なカスタムデータによるこれらの詳細の取得をカプセル化する独自のクラスがあります。
よろしく
現在のユーザーIDを取得するには、以下を試してください
string currentUserId= Convert.ToString(Membership.GetUser().ProviderUserKey);