apicontroller의 OwinContext에서 UserManager를 가져올 수 없습니다.
Identity 2.0.0으로 이메일 유효성 검사를 구현하기 위해 Microsoft 샘플을 따르고 있습니다.
이 부분에 갇혀
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
이것은에서 작동 controller
하지만 ApiController에 메서드를 HttpContext
포함하지 않습니다 .GetOwinContext
그래서 시도 HttpContext.Current.GetOwinContext()
했지만 방법 GetUserManager
이 존재하지 않습니다.
Startup.Auth.csUserManager
에서 빌드 하는 방법을 찾을 수 없습니다.
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
public void ConfigureAuth(IAppBuilder app)
{
//Configure the db context, user manager and role manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
...
}
이 줄
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
다음 함수를 호출하여 UserManager
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
//Configure validation logic for usernames
manager.UserValidator = new UserValidator<ApplicationUser>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = true
};
// Configure user lockout defaults
manager.UserLockoutEnabledByDefault = true;
manager.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
manager.MaxFailedAccessAttemptsBeforeLockout = 5;
manager.EmailService = new EmailService();
var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
}
return manager;
}
어떻게하면이 액세스 할 수 있습니다 UserManager
에 ApiController
?
나는 당신의 질문을 일찍 오해했습니다. 몇 가지 using 문이 누락 된 것 같습니다.
은 GetOwinContext().GetUserManager<ApplicationUserManager>()
에서입니다 Microsoft.AspNet.Identity.Owin
.
따라서이 부분을 추가해보십시오.
using Microsoft.AspNet.Identity.Owin;
using Microsoft.AspNet.Identity; // Maybe this one too
var manager = HttpContext.Current.GetOwinContext().GetUserManager<UserManager<User>>();
This extension method may be a better solution if you want to unit test your controllers.
using System;
using System.Net.Http;
using System.Web;
using Microsoft.Owin;
public static IOwinContext GetOwinContext(this HttpRequestMessage request)
{
var context = request.Properties["MS_HttpContext"] as HttpContextWrapper;
if (context != null)
{
return HttpContextBaseExtensions.GetOwinContext(context.Request);
}
return null;
}
Usage:
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
This single line of code saved my day...
var manager =
new ApplicationUserManager(new UserStore<ApplicationUser>(new ApplicationDbContext()));
You can use it within a controller action to get an instance of UserManager.
참고URL : https://stackoverflow.com/questions/24001245/cant-get-usermanager-from-owincontext-in-apicontroller
'developer tip' 카테고리의 다른 글
치명적 : 잘못된 기본 개정판 'HEAD' (0) | 2020.11.11 |
---|---|
# 1214-사용 된 테이블 유형이 FULLTEXT 인덱스를 지원하지 않습니다. (0) | 2020.11.11 |
float가 모든 int 값을 나타낼 수 없는데 왜 C ++에서 int를 float로 승격합니까? (0) | 2020.11.11 |
녹색 스레드 대 비 녹색 스레드 (0) | 2020.11.11 |
저장소의 최상위 수준에서만 특정 파일 이름을 무시하도록 Git에 지시하는 방법은 무엇입니까? (0) | 2020.11.11 |