Kirim permintaan

BERLAKU UNTUK: Semua tingkatAN API Management

Kebijakan send-request mengirimkan permintaan yang diberikan ke URL yang ditentukan, menunggu tidak lebih dari nilai waktu tunggu yang ditetapkan.

Catatan

Tetapkan elemen kebijakan dan elemen turunan dalam urutan yang disediakan dalam pernyataan kebijakan. Pelajari lebih lanjut cara mengatur atau mengedit kebijakan API Management.

Pernyataan kebijakan

<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>

Atribut

Atribut Deskripsi Wajib diisi Default
mode Menentukan apakah ini adalah new permintaan atau copy header dan isi dalam permintaan saat ini. Di bagian kebijakan keluar, mode=copy tidak menginisialisasi isi permintaan. Ekspresi kebijakan diizinkan. No new
respons-variabel-nama Nama variabel konteks yang akan menerima objek respons. Jika variabel tidak ada, variabel akan dibuat setelah eksekusi kebijakan berhasil dan akan dapat diakses melalui kumpulan context.Variable. Ekspresi kebijakan diizinkan. Ya T/A
waktu habis Interval waktu habis dalam hitungan detik sebelum panggilan ke URL gagal. Ekspresi kebijakan diizinkan. No 60
ignore-error Jika true dan permintaan menghasilkan kesalahan, kesalahan akan diabaikan, dan variabel respons akan berisi nilai null. Ekspresi kebijakan tidak diizinkan. No false

Elemen

Elemen Deskripsi Wajib diisi
set-url URL permintaan. Ekspresi kebijakan diizinkan. Tidak jika mode=copy; sebaliknya ya.
atur-metode Mengatur metode permintaan. Ekspresi kebijakan tidak diizinkan. Tidak jika mode=copy; sebaliknya ya.
atur-judul Mengatur header dalam permintaan. Gunakan beberapa set-header elemen untuk beberapa header permintaan. No
set-body Mengatur isi permintaan. No
authentication-certificate Sertifikat yang digunakan untuk autentikasi klien, ditentukan dalam thumbprint atribut. No
proksi Merutekan permintaan melalui proksi HTTP. No

Penggunaan

Catatan penggunaan

Jika instans API Management Anda disebarkan (disuntikkan) dalam VNet dalam mode internal dan Anda menggunakan kebijakan ini untuk mengirim permintaan API ke API yang diekspos dalam instans API Management yang sama, Anda mungkin mengalami batas waktu dengan kesalahan HTTP 500 Backend Koneksi ionFailure. Ini adalah hasil dari batasan Azure Load Balancer.

Untuk menautkan permintaan API ke gateway dalam skenario ini, konfigurasikan set-url untuk menggunakan URL https://127.0.0.1loopback localhost . Selain itu, atur HOST header untuk menentukan host gateway instans API Management ini. Anda dapat menggunakan default azure-api.net atau host domain kustom Anda. Contohnya:

<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>

Untuk informasi selengkapnya, lihat posting blog ini.

Contoh

Contoh ini menunjukkan satu cara untuk memverifikasi token referensi dengan server otorisasi. Untuk informasi selengkapnya tentang sampel ini, lihat Menggunakan layanan eksternal dari layanan 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>

Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat: