C#을 사용하는 Azure API Management 고급 정책 - I

4776 단어
이 기사에서는 APIM 정책 내에서 나머지 API 호출을 사용하는 방법과 정책에서 완전히 API의 응답을 기반으로 IP 제한을 적용하는 방법을 볼 수 있습니다.

조건 및 Ip 필터 정책과 고급 C# 코드 내부 정책을 수행할 수 있는 MSDN의 다음this article을 통해 수행할 수 있습니다.

이제 먼저 API 관리 정책 내에서 Rest Api 호출을 수행하는 방법을 살펴보겠습니다.

다음 코드는 시간 제한을 설정할 수 있고 응답 변수 이름과 오류를 무시할 수 있는 send-request 요소를 보여줍니다.

<send-request mode="new" timeout="300" response-variable-name="resdata" ignore-error="false">



그런 다음 set-url 요소는 요청을 처리해야 하는 Api의 URL을 설정합니다.

<set-url>https://apiendpoint.com/isipallowed/check</set-url>



그런 다음 set-method 요소는 GET, POST, PUT, PATCH와 같은 메서드 유형을 업데이트하는 데 사용됩니다.

<set-method>POST</set-method>



그런 다음 set-header 요소는 요청의 헤더를 설정하는 데 사용됩니다. 이 예제에서는 json 콘텐츠로 POST 요청을 처리할 것이므로 값이 application/json인 Content-Type 헤더를 추가해야 합니다.

<set-header name="Content-Type" exists-action="override">
           <value>application/json</value>
</set-header>



set-body 요소는 요청 시 전송할 json 콘텐츠를 제공하는 데 사용됩니다.

<set-body>
       <value>@{
                    var body = "{ /"ipvalue/" : @context.Request.IpAddress }";
                    return body;          
                }
      </value>
</set-body>



전체 send-request 요소는 이제 아래와 같습니다.

<send-request mode="new" timeout="300" response-variable-name="resdata" ignore-error="false">
        <set-url>https://apiendpoint.com/isipallowed/check</set-url>
        <set-method>POST</set-method>
        <set-header name="Content-Type" exists-action="override">
                <value>application/json</value>
         </set-header>
         <set-body>
               <value>@{
                    var body = "{ /"ipvalue/" : @context.Request.IpAddress }";
                    return body;          
                    }
              </value>
          </set-body>
</send-request>



이제 Choose 및 when 조건을 사용하여 보낸 IP가 목록에 있고 응답 코드가 200인지 확인합니다. 찾지 못하면 IP를 차단해야 합니다.

<choose>
            <when condition="@(((IResponse)context.Variables.GetValueOrDefault<IResponse> 
                      ("resdata")).StatusCode != 200)">
                <--- your policy -->
            </when>
</choose>



IP를 차단하기 위해서는 위의 태그 안에 다음과 같은 IP 필터 정책을 추가해야 합니다.

<ip-filter action="forbid">
            <address>@(context.Request.IpAddress)</address>
</ip-filter>



이제 전체 정책은 아래 코드와 같습니다.

<policies>
    <inbound>
        <base />
        <send-request mode="new" timeout="300" response-variable-name="resdata" ignore-error="false">
            <set-url>https://apiendpoint.com/isipallowed/check</set-url>
            <set-method>POST</set-method>
            <set-header name="Content-Type" exists-action="override">
                <value>application/json</value>
            </set-header>
            <set-body>
                 <value>@{
                    var body = "{ /"ipvalue/" : @context.Request.IpAddress }";
                    return body;          
                }</value></set-body>
        </send-request>
        <choose>
            <when condition="@(((IResponse)context.Variables.GetValueOrDefault<IResponse> 
                       ("resdata")).StatusCode != 200)">
                <ip-filter action="forbid">
                    <address>@(context.Request.IpAddress)</address>
                </ip-filter>
            </when>
        </choose>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

좋은 웹페이지 즐겨찾기