2011-10-03 2 views
1

핸들러의 메서드에 첨부 할 수있는 몇 가지 사용자 지정 특성을 만들었습니다. 맞춤 속성은 단순한 '태그 지정자'이상입니다. 'RequiresAuthenticationAttribute'입니다. 단순화 된 예 :OperationInterceptor의 MethodInfo에 대한 액세스

EnforceParam 주석 메소드 호출되는 내 인터셉터에서
[EnforceParam("Account")] 

, 나는 값 "계정"에 접근하고 싶습니다. 이를 위해

public override bool BeforeExecute(IOperation operation) 
{ 
    ReflectionBasedMethod method = (ReflectionBasedMethod)((MethodBasedOperation)operation).Method; 
    MethodInfo methodInfo = method.MethodInfo; 

내가 OpenRasta의 ReflectionBasedMethod에 '방법'속성을 추가했다, 일 : 내가 현재 그것을 위해 일을하고있어이 있습니다.

OpenRasta를 해킹하지 않고도 동일한 작업을 수행 할 수 있습니까 (2.0btw).

답변

4

그건 잘못된 질문입니다. 당신이 찾고있는 것은 간단합니다 :

var attribute = operation.FindAttribute<EnforceParamAttribute>() 

다운 캐스팅은 지원되지 않으며 조작은 조작과 입력을 목적에 맞게 반영해야합니다. 다운 캐스트하지 마십시오. 입니다. 코드가 다시 작성/제거 될 예정인 IMethod API를 사용하는 한 버전 이상으로 작동하지 않을 수도 있습니다.

+0

굉장, 고마워. 같은 유형의 여러 속성을 가질 수 있으므로 FindAttributes (복수형)에갔습니다. 어떤 문제가 발생했는지 : 메서드에 2 개의 EnforceParamAttributes가있는 경우 BeforeExecute가 동일한 인터셉터에서 두 번 호출되지만 BeforeExecute가 호출되는 속성 인스턴스가 아니라면 FindAttributes를 사용하여 모든 속성을 살펴보고 두 번 필요하지 않습니다. BeforeExecute 내에 "ranBefore"플래그를 설정하는 것 이외의 다른 방법을 생각해보십시오. –

+0

@EugeneBeresovksy : 아마도 다른 질문에 답할 가치가 있습니다. 답변을 수락하면 serialseb가 감사 할 것입니다. –

+0

한 번만 등록한 인터셉터는 두 번 이상 실행하면 안됩니다. – SerialSeb