asp.net identityを持つasp.net core mvcを使用しています。私はapplicationUser.Country
から読み込まれた値にSystem.Threading.Thread.CurrentThread.CurrentCulture
を設定したいCountry
=> 'GB' または 'FR' など...httpリクエスト内で認証されたユーザオブジェクトをあまりにも頻繁にクエリする
:
私ApplicationUser
は、プロパティを持っています。ユーザーが設定した日時/数値の値をすべて自分のビューに正しく表示する。私はthis.userManager.GetUserAsync(User);
public async Task<IActionResult> Index()
{
var user = await this.userManager.GetUserAsync(User);
var todos = await service.GetTodosAsync(user.Id);
return View(todos);
}
:こののActionFilterは私もこのコードを実行する設定されているアクション/コントローラで
public class LanguageActionFilter : ActionFilterAttribute
{
private readonly ILogger _logger;
private UserManager<ApplicationUser> _userManager;
public LanguageActionFilter(ILoggerFactory loggerFactory, UserManager<ApplicationUser> userManager)
{
_logger = loggerFactory.CreateLogger("LanguageActionFilter");
_userManager = userManager;
}
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
var user = await _userManager.GetUserAsync(context.HttpContext.User);
Thread.CurrentThread.CurrentCulture = new CultureInfo(user.Country);
await base.OnActionExecutionAsync(context, next);
}
}
:
そこで私は、このアクションフィルタを作成しました
TWO TIMES!
は、その後、私は
context.HttpContext.Items.Add("applicationUser", user);
にユーザーオブジェクトを渡すとIndex() action
方法以内に再度このユーザーオブジェクトをつかむことについて考え:
var user = (ApplicationUser)base.HttpContext.Items["applicationUser"];
働いたが、それは良いアイデアですか?あなたはそのアプローチに何か問題を見ますか?あなたがやったことは結構です
リンクは約EF4,5,6です。 Wetherのasp.netコアID/EF 7キャッシュからのuserManagerメソッドでは、GetUserAsyncはソースコード内にのみ存在します。または、クエリ実行中にSQLプロファイラを有効にします。 – Pascal
コアが第1レベルのキャッシュをサポートしていないようです。だから私の考えは何のためにも行きませんでした –