傳送要求
適用於:所有 APIM 層
send-request
原則會將所提供的要求傳送至指定的 URL,等候時間不會超過所設定的逾時值。
注意
請依照原則陳述式中提供的順序,來設定原則的元素和子元素。 深入了解如何設定或編輯 APIM 原則。
原則陳述式
<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>
屬性
屬性 | 描述 | 是必要欄位 | 預設 |
---|---|---|---|
mode | 判斷這是 new 要求,還是目前要求中標頭和本文的 copy 。 在輸出原則區段中,mode=copy 不會將要求本文初始化。 允許使用原則運算式。 |
No | new |
response-variable-name | 將會收到回應物件之內容變數的名稱。 如果變數不存在,即會在原則成功執行時加以建立,並變成可透過 context.Variable 集合進行存取。 允許使用原則運算式。 |
Yes | N/A |
timeout | 以秒為單位的逾時間隔,URL 的呼叫在經過此間隔後便會失敗。 允許使用原則運算式。 | No | 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 屬性中指定。 |
No |
Proxy | 透過 HTTP Proxy 路由傳送要求。 | No |
使用方式
使用注意事項
如果您的 APIM 執行個體是在「內部」模式的 VNet 中部署 (插入),而且您使用此原則來將 API 要求傳送至在相同 APIM 執行個體中公開的 API,則您可能會遇到逾時且發生 HTTP 500 BackendConnectionFailure 錯誤。 這是 Azure Load Balancer 限制的結果。
若要將此案例中的 API 要求鏈結至閘道,請將 set-url
設定為使用 localhost 回送 URL https://127.0.0.1
。 此外,設定 HOST
標頭,以指定此 APIM 執行個體的閘道主機。 您可以使用預設的 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>
如需詳細資訊,請參閱這篇部落格文章。
範例
此範例會顯示向授權伺服器確認參考權杖的方法。 如需此範例的詳細資訊,請參閱使用來自 Azure API 管理服務的外部服務。
<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>
相關原則
相關內容
如需使用原則的詳細資訊,請參閱:
- 教學課程:轉換及保護 API
- 原則參考,取得原則陳述式及其設定的完整清單
- 原則運算式
- 設定或編輯原則
- 重複使用原則設定
- 原則程式碼片段存放庫 (英文)
- 使用 Microsoft Azure Copilot 撰寫原則