C#(ASP.NETコア)プロジェクトでは、ログイン後、ユーザーのアクセス許可に応じてサブメニュー付きメニューを表示する必要があります。 このメニューはすべてのサイトに表示されます。基本的にダッシュボードメニューです。TagHelperで現在のユーザーを取得
このメニュー(サブメニュー)の内容は、ユーザーの許可に従って動的に表示されます。 私はTagHelperクラスを作成すると、現在ログインしているユーザーを取得し、このユーザーに許可されているコンテンツを取得し、サブメニューのコンテンツを作成します(somes <ul>
および<li>
)。
これが最善のアプローチであるかどうかわかりません。私は提案を受け入れる。
しかし、この方法でも問題ない場合は、現在ログインしているユーザーをTagHelperクラスでどのように取得できますか? このクラスにHttpContext
はありません。TagHelperContext
のみです。
TagHelper:
public class UserContentTagHelper : TagHelper
{
private readonly UserManager<ApplicationUser> _userManager;
public UserContentTagHelper(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
output.TagMode == TagMode.SelfClosing;
// Error. HttpContext.User not avaliable
var uid = _userManager.GetUserId(HttpContext.User);
}
}
通常、現在ログインしているユーザーを取得するには、私がHttpContext.User
を使用していますが、これが唯一のコントローラクラスにavaliableです。
ありがとうございます!
が働いていた:あなたはまた、スタートアップクラスのメソッドあなたのConfigureServicesで
IActionContextAccessor
を登録する必要があります:あなたは、その後でのHttpContextとそれに関連するユーザーを取得することができます! (uid = _userManager.GetUserId(user);) –
良い点が更新されました。この問題を解決するためには、IActionContextAccessorのDIを設定する必要があります( 'services.AddSingleton();'答え –