2017-02-07 1 views
0

MVC 4 프로젝트를 사용하여 API 용 기본 컨트롤러를 만들었습니다. 모든 것이 효과가 있지만 효율적이기 때문에 OnAuthorization 메서드에서 기본 컨트롤러의 일부 사용자 지정 속성에 액세스 할 수 있어야합니다. 액세스 토큰이 유효한지 확인하기 위해 일부 SQL 쿼리를 수행해야합니다. Id는이 쿼리를 한 번 만들고 컨트롤러에 속성으로 객체를 저장하므로 나중에 쿼리를 다시 수행 할 필요없이 액세스 할 수 있습니다.AuthorizeAttribute 메서드의 ASP.NET 액세스 컨트롤러 속성

요컨대, 이것이 내가하고 싶은 일입니다.

[APIActionFilter] 
public class APIBaseController : ApiController 
{ 
    public APIClient client; 
    public class APIActionFilter : System.Web.Http.AuthorizeAttribute 
    { 
     public override void OnAuthorization(HttpActionContext filterContext) 
     { 
      //get data from the database. 
      Controller.client = objectmadefromdb; 
     } 
    } 
} 

어딘가에 전달 된이 객체에 대한 참조가 있어야합니까?

+0

check'filterContext.ControllerDescriptor' – Nkosi

+0

얼마나 도움이 될지 모르겠지만 사용자 정의 권한 부여 특성에서 데이터베이스 호출과 비슷한 작업을 수행했습니다. 참조 : [SO link] (http://stackoverflow.com/questions/29172150/custom-webapi-authorization-database-call) – MisterIsaak

답변

1

첫 번째 댓글은 줄에 있지만 정확한 것은 아닙니다.

public override void OnAuthorization(HttpActionContext filterContext) 
{ 
    var controllerRef = filterContext.ControllerContext.Controller as APIBaseController; 
    controllerRef.userdata = new user("123"); 
} 

이제 주 컨트롤러에서 속성에 액세스 할 수있었습니다. APIBaseController 객체에서 일부 공용 속성을 설정하고 직접 값을 할당 할 수있었습니다. 물론 게터와 세터 등을 사용할 수 있습니다.

작동 확인을 위해 기본 컨트롤러를 상속 한 새 컨트롤러를 만들 수있었습니다. 해당 컨트롤러 내의 모든 작업에서 APIBaseController 개체의 속성에 액세스 할 수 있었으며 OnAuthorization 메서드에서 설정 한 데이터로 채워졌습니다.

관련 문제