要求の送信
適用対象: すべての 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 プロキシ経由で要求をルーティングします。 | いいえ |
使用法
- ポリシー セクション: inbound、outbound、backend、on-error
- ポリシー スコープ: グローバル、ワークスペース、製品、API、操作
- ゲートウェイ: 専用、従量課金、セルフホステッド、ワークスペース
使用上の注意
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>
関連ポリシー
関連するコンテンツ
ポリシーに対する処理の詳細については、次のトピックを参照してください。