這是我的代碼的一部分:
public void ConfigureServices(IServiceCollection services)
{
options.Events = new CookieAuthenticationEvents() {
OnValidatePrincipal = async (c) =>
{
//using (ServiceProvider serviceProvider = builder.Services.BuildServiceProvider()) // ASP0000
//{
// var userManager = serviceProvider.GetRequiredService<UserManager<MyUser>>();
//var myUser = await userManager.GetUserAsync(c.Principal);
//if (myUser != null && !myUser.EmailConfirmed)
//{
// c.RejectPrincipal();
//}
//}
}
};
});
}
取消注釋時,它可以作業,但是 BuildServiceProvider 方法上有一個警告(綠色下劃線)說:
ASP0000:從應用程式代碼呼叫 BuildServiceProvider 會導致創建單例服務的額外副本。
那么在 ConfigureServices 中獲取 UserManager 的替代方法是什么?我不能注入它,因為 ConfigureServices 方法只接受零個或一個引數,它必須是 IServiceCollection。
uj5u.com熱心網友回復:
您不應該在處理程式中構建提供程式并從中解決某些問題(這絕對不是您要為每個主體驗證執行的操作),只需使用它的背景關系引數:
new CookieAuthenticationEvents
{
OnValidatePrincipal = context =>
{
var userManager = context.HttpContext.RequestServices.GetRequiredService<UserManager<MyUser>>();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/414087.html
標籤:
