2016-10-26 14 views
1

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です。

ありがとうございます!

答えて

4

IActionContextAccessorパラメータをコンストラクタに追加します。

services.AddSingleton<IActionContextAccessor, ActionContextAccessor>(); 
+1

が働いていた:あなたはまた、スタートアップクラスのメソッドあなたのConfigureServicesでIActionContextAccessorを登録する必要があります

var user = actionAccessor.ActionContext.HttpContext.User; var uid = _userManager.GetUserId(user); 

:あなたは、その後でのHttpContextとそれに関連するユーザーを取得することができます! (uid = _userManager.GetUserId(user);) –

+0

良い点が更新されました。この問題を解決するためには、IActionContextAccessorのDIを設定する必要があります( 'services.AddSingleton ();'答え –

関連する問題