要求の送信

適用対象: すべての API Management レベル

send-request ポリシーは、設定されたタイムアウト値以内の待機時間で、指定された要求を指定された URL に送信します。

Note

ポリシーの要素と子要素を、ポリシー ステートメントで指定された順序で設定します。 API Management ポリシーを設定または編集する方法について説明します。

ポリシー ステートメント

<send-request mode="new | copy" response-variable-name="" timeout="60 sec" ignore-error
="false | true">
  <set-url>request URL</set-url>
  <set-method>...</set-method>
  <set-header>...</set-header>
  <set-body>...</set-body>
  <authentication-certificate thumbprint="thumbprint" />
  <proxy>...</proxy>
</send-request>

属性

属性 説明 必要 Default
mode これが new の要求であるか、現在の要求のヘッダーと本文の copy であるかを判定します。 送信ポリシー セクションでは、mode=copy は要求本文を初期化しません。 ポリシー式を使用できます。 いいえ new
response-variable-name 応答オブジェクトを受信するコンテキスト変数の名前。 この変数が存在しない場合は、ポリシーの正常な実行時に作成され、context.Variable コレクション経由でアクセス可能になります。 ポリシー式を使用できます。 はい 該当なし
timeout URL の呼び出しが失敗するまでのタイムアウト間隔 (秒単位)。 ポリシー式を使用できます。 いいえ 60
ignore-error これを true にして、要求でエラーが発生した場合、エラーは無視され、応答変数に null 値が含まれます。 ポリシー式は使用できません。 No false

要素

要素 説明 必須
set-url 要求の URL。 ポリシー式を使用できます。 いいえ (mode=copy の場合)。はい (それ以外の場合)。
set-method 要求のメソッドを設定します。 ポリシー式は使用できません。 いいえ (mode=copy の場合)。はい (それ以外の場合)。
set-header 要求のヘッダーを設定します。 複数の要求ヘッダーには複数の set-header 要素を使用します。 No
set-body 要求の本文を設定します。 No
authentication-certificate クライアントの認証に使用する証明書thumbprint 属性で指定されます。 いいえ
proxy HTTP プロキシ経由で要求をルーティングします。 いいえ

使用法

使用上の注意

API Management インスタンスが "内部" モードで VNet にデプロイ (挿入) され、このポリシーを使用して、同じ API Management インスタンスで公開されている API に API 要求を送信すると、HTTP 500 BackendConnectionFailure エラーでタイムアウトが発生する可能性があります。 これは、Azure Load Balancer の制限の結果です。

このシナリオで API 要求をゲートウェイにチェーンするには、localhost ループバック URL https://127.0.0.1 を使用するように set-url を構成します。 さらに、HOST ヘッダーを設定して、この API Management インスタンスのゲートウェイ ホストを指定します。 既定値の azure-api.net またはカスタム ドメイン ホストを使用できます。 次に例を示します。

<send-request>
     <set-url>https://127.0.0.1/myapi/myoperation</set-url>
     <set-header name="Host">
         <value>myapim.azure-api.net</value>
     </set-header>
</send-request>

詳細は、こちらの ブログ記事 を参照してください。

この例は、承認サーバーを使用して参照トークンを検証する 1 つの方法を示しています。 このサンプルの詳細については、「Azure API Management サービスからの外部サービスの使用」を参照してください。

<inbound>
  <!-- Extract token from Authorization header parameter -->
  <set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("Authorization","scheme param").Split(' ').Last())" />

  <!-- Send request to Token Server to validate token (see RFC 7662) -->
  <send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
    <set-url>https://microsoft-apiappec990ad4c76641c6aea22f566efc5a4e.azurewebsites.net/introspection</set-url>
    <set-method>POST</set-method>
    <set-header name="Authorization" exists-action="override">
      <value>basic dXNlcm5hbWU6cGFzc3dvcmQ=</value>
    </set-header>
    <set-header name="Content-Type" exists-action="override">
      <value>application/x-www-form-urlencoded</value>
    </set-header>
    <set-body>@($"token={(string)context.Variables["token"]}")</set-body>
  </send-request>

  <choose>
        <!-- Check active property in response -->
        <when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] == false)">
            <!-- Return 401 Unauthorized with http-problem payload -->
            <return-response>
                <set-status code="401" reason="Unauthorized" />
                <set-header name="WWW-Authenticate" exists-action="override">
                    <value>Bearer error="invalid_token"</value>
                </set-header>
            </return-response>
        </when>
    </choose>
  <base />
</inbound>

ポリシーに対する処理の詳細については、次のトピックを参照してください。