MVC3 프로젝트와 함께 ASP.NET 웹 API 프로젝트가 나란히 있습니다. 두 프로젝트 모두에서 Ninject는 종속성 확인자로 구성됩니다.종속성 주입과 관련된 Ninject 및 Asp.Net 웹 API 문제
내 API에 대한 수신 요청을 인증하기 위해 자체 인증 속성을 작성 중이므로 웹 API 프로젝트에 문제가 있습니다. 이 속성에서 요청에 대한 몇 가지 검증을 수행하려면 몇 가지 종속성을 주입해야합니다.
이public class CustomAuthorizeAttribute : ActionFilterAttribute
{
public string Roles { get; set; }
[Inject]
public IAuthSchemaSelector _schemaSelector { private get; set; }
[Inject]
public IUserService _userService { private get; set; }
[Inject]
public IRoleVerifier _roleVerifier { private get; set; }
public override void OnActionExecuting(HttpActionContext actionContext)
{
try
{
var principal = _schemaSelector.Authorize(actionContext.Request, Roles, _userService, _roleVerifier);
actionContext.Request.Properties["MS_UserPrincipal"] = principal;
}
catch (Exception ex)
{
//create error response with proper http status
}
}
}
}
_schemaSelector이이 난 때문이다 (이 API에 포함 된 서비스를 요청하기 위해 사용하는 인증이 클라이언트를 스키마하는 결정 :
그래서이 속성의 코드가 모습입니다 OAuth, API 키 인증 등 다른 스키마를 지원할 계획입니다. 지금 당장 HttpBasic을 사용하고 있습니다.) 따라서 eveythign이 정상적으로된다면 나는 주 사용자를 설정하므로 ApiController에서 액세스 할 수 있습니다.
MVC3 프로젝트 (웹 사이트)에서 수정하기 전까지는 모든 것이 완벽합니다. 예를 들어 웹 사이트에는 사용자 암호 변경을 담당하는 기능이 있습니다. 초기 암호 123456이 있다고 가정합니다. HttpBasic을 사용하여 API에서 요청을하면 api는 http 상태 202에 응답합니다.
이제 웹 사이트의 암호를 1234567로 변경하고 이전 암호를 사용하여 API에서 다른 요청을 수행합니다 (123456), 202에 응답합니다. 이것은 매우 잘못되었습니다.
_userService 개체가 제대로 작동하지 않으며 다른 두 개체가 주입되지 않았습니다. 내가 작업 필터를 디버깅 할 때 전체 개체가 이전 상태임을 알 수 있습니다. Im을 추측하는 것은 ninject가 어떻게 구성되는지에 대해 잘못된 것입니다.
kernel.Bind<IUserService>().To<UserService>(); //user service is part of the unit of work
kernel.Bind<IUnitOfWork>().To<EFUnitOfWork>().InRequestScope();
kernel.Bind<IRoleVerifier>().To<RoleVerifier>();
kernel.Bind<IAuthSchemaSelector>().To<AuthSchemaSelector>();
그것은 내가로 _userService를 주입하고있어 가치가 언급의 다음 Ninject에 모듈 파일에
GlobalConfiguration.Configuration
.ServiceResolver
.SetResolver(t => kernel.TryGet(t),
t => kernel.GetAll(t));
: NinjectWebCommon.cs에서
:
이 내가 Ninject에 구성하는 방법입니다 내가 생성자 패턴을 사용할 수 없기 때문에, 속성 주입 패턴을 사용하는 ActionFilterAttribute. 이것이 문제인지 나는 모른다.
도와주세요! 나는 여기에서 약간 잃어버린다!