MVC4/Razor에서 사용자 정의 권한 부여 특성을 만들고 사용자 정의 권한 부여 특성에서 "AllowAnnoymous"특성을 실행하는 데 문제가 있습니다 (무시하는 것으로 보입니다). 컨트롤러 나 동작에 익명 특성 허용 여부가 포함되어 있는지 확인한 다음 통과 할 수 있는지 확인하여 솔루션 (아래 참조)을 찾았으므로 괜찮습니다.CustomAuthorizeAttribute - AuthorizationContext 대신 HttpActionContext
그러나 "AuthorizeAttribute"클래스를 만들고 "OnAuthorization"오버라이드를 구현하려고 할 때 객체 처리기를 "AuthorizationContext"유형으로 설정하지만 아래 예제와 다른 많은 경우에는 ' 여기에 "AuthorizationContext"가 사용되어서는 안되는 대신 "HttpActionContext"여야합니다. 비록 내가 "HttpActionContext"로 대체하려고 시도했지만, 오버라이드는 적절한 메소드가 없다는 것을 말하는데 실패한다. 제가 누락/잘못하고있는 것에 대한 아이디어가 있습니까?
Example Found Here (By Jammer)
private static bool SkipAuthorization(HttpActionContext actionContext)
{
Contract.Assert(actionContext != null);
return actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any()
|| actionContext.ControllerContext.ControllerDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();
}
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
}
내 코드
private override void OnAuthorization(AuthorizationContext filterContext) // Not sure how to change this to HttpActionContext
{
if (filterContext == null) throw new ArugmentException("filterContext");
if (!AllowAnnonymous(new HttpActionContext()))
{
throw new HttpResponseException(HttpStatusCode.UnAuthorized);
}
else
{
base.OnAuthorization(filterContext);
}
}
음 - 확실히 설명해줍니다. WebAPI가 MVC와 별개의 것을 사용한다는 것을 깨닫지 못했습니다. 이 시나리오 대 MVC의 System.Web.Http.AuthorizeAttribute를 사용할 수 있습니까? 또한 "AuthorizeCore"재정의를 확인합니다. 익명 속성을 사용할 수 있기를 바랄 것입니다 (사물을 따지지 않고). 진심으로 설명에 감사드립니다! –
'이 시나리오 대 MVC의 System.Web.Http.AuthorizeAttribute를 사용할 수 있습니까? '아니요,하지만 왜 그렇게하고 싶은지 불분명합니다. 그들 사이에 비지니스 로직을 공유하고 싶다면'System.Web.Mvc.IAuthorizationFilter'와'System.Web.Http.IAuthorizationFilter'를 모두 구현하는 하나의 클래스를 생성하거나, 주입되는 공통 서비스를 만들 수 있습니다 AuthorizeAttribute와 함께 DI를 사용하는 방법에 대한 정보는 [이 답변] (https://stackoverflow.com/a/32254851/)을 참조하십시오. – NightOwl888
흥미 롭군요 - 제공된 링크/설명을 사용하여 테스트 한 결과이 기능이 저에게 효과가 있다고 생각합니다. 도와 주셔서 감사합니다! –