ASP.Net vNext / MVC6 プロジェクトに取り組んでいます。ASP.Net Identity に慣れてきました。
クラスは明らかに、ApplicationUser
追加のユーザー プロパティを追加することになっている場所であり、これは Entity Framework で機能し、追加のプロパティは期待どおりにデータベースに格納されます。
ただし、ビュー内から現在ログインしているユーザーの詳細にアクセスしたい場合に問題が発生します。具体的には_loginPartial.cshtml
、メールアドレスが必要なユーザーの Gravatar アイコンを取得して表示する必要があります。
RazorView
基本クラスには User プロパティがあり、これはClaimsPrincipal
. カスタム プロパティを取得するには、このUser
プロパティから に戻るにはどうすればよいですか?ApplicationUser
情報を見つける方法を尋ねているわけではないことに注意してください。ApplicationUser
値からを検索する方法を知っていUser.GetUserId()
ます。これは、この問題に賢明に取り組む方法についての質問です。具体的には、次のことはしたくありません。
- ビュー内から任意の種類のデータベース ルックアップを実行します (関心の分離)
- 現在のユーザーの詳細を取得するには、すべてのコントローラーにロジックを追加する必要があります (DRY 原則)
- すべての ViewModel に User プロパティを追加する必要があります。
これは、一元化された標準ソリューションが必要な「分野横断的な懸念」のように思えますが、ジグソー パズルのピースが欠けているように感じます。ビュー内からこれらのカスタム ユーザー プロパティを取得する最善の方法は何ですか?
注: MVC チームは、UserName プロパティが常にユーザーの電子メール アドレスに設定されるようにすることで、プロジェクト テンプレート内でこの問題を回避し、ユーザーの電子メール アドレスを取得するためにこの検索を実行する必要がないようにしています! それは私にはちょっとした詐欺のように思えます.私のソリューションでは、ユーザーのログイン名はメールアドレスである場合とそうでない場合があるため、そのトリックに頼ることはできません(後でアクセスする必要がある他のプロパティがあると思います. )。