2017-04-03 10 views
0

사용자의 Jwt 클레임 데이터를 기반으로 Azure API 정책 속성을 설정할 수 있어야합니다. 나는 counter-key와 increment-condition 같은 것들에 문자열 값을 설정할 수 있었지만 모든 속성을 설정할 수는 없었다. 내가 좋아하는 일을 상상 다음Azure APIM 정책 편집기

Error in element 'rate-limit-by-key' on line 98, column 10: The 'calls' attribute is invalid - The value '@((int) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/LimitRate/Limit", "5"))' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:int' - The string '@((int) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/LimitRate/Limit", "5"))' is not a valid Int32 value. 

나는 심지어 문제가 문자열 매개 변수를 설정이 있습니다

<rate-limit-by-key 
    calls="@((int) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/LimitRate/Limit", "5"))" 
    renewal-period="@((int) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/LimitRate/Duration/InSeconds", "60"))" 
    counter-key="@((string)context.Variables["Subject"])" 
    increment-condition="@(context.Response.StatusCode == 200)" 
/> 

그러나 나는 다음과 같은 오류가 나는 정책을 저장할 때 일부 유효성 검사가 일어나고있는 것 같습니다

:

<quota-by-key 
    calls="10" 
    bandwidth="100" 
    renewal-period="@((string) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/Quota/RenewalPeriod", "P00Y00M01DT00H00M00S"))" 
    counter-key="@((string)context.Variables["Subject"])" 
/> 

나는 시도하고 정책을 저장할 때 다음을 준다 (엄격한 형식의 하나이기는하지만)3210

Error in element 'quota-by-key' on line 99, column 6: @((string) context.Variables["IdentityToken"].AsJwt().Claims.GetValueOrDefault("/Quota/RenewalPeriod", "P00Y00M01DT00H00M00S")) is not in a valid format. Provide number of seconds or use 'PxYxMxDTxHxMxS' format where 'x' is a number. 

문자열 변환이 아닌 @ {return 5}, @ (5) 등의 다양한 변형 캐스팅을 시도했지만 저장 시간에 일부 유효성 검사가 발생하는 것으로 보입니다. 그만둬.

내 API에 추가하는 것이 유용한 기능이라고 생각하여이 문제를 해결할 수 있습니까?

답변

1

키 별 할당량 및 할당량 통화의 통화 속성은 정책 표현식을 지원하지 않습니다. 내부 제한으로 인해 불행히도 요청별로 처리하지 못합니다. 가장 좋은 방법은 요청을 몇 개의 유한 그룹으로 분류하고 선택 정책을 사용하여 조건부로 비율 제한/할당량을 적용하는 것입니다.

또는 increment-count 속성을 사용하여 각 요청마다 얼마나 많은 카운터가 증가하는지 제어하십시오.