Wyślij wniosek

DOTYCZY: Wszystkie warstwy usługi API Management

Zasady send-request wysyła podane żądanie do określonego adresu URL, czekając nie dłużej niż ustawiona wartość limitu czasu.

Uwaga

Ustaw elementy zasad i elementy podrzędne w kolejności podanej w instrukcji zasad. Dowiedz się więcej na temat ustawiania lub edytowania zasad usługi API Management.

Instrukcja zasad

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

Atrybuty

Atrybut opis Wymagani Wartość domyślna
tryb Określa, czy jest new to żądanie, czy copy treść nagłówków i treści w bieżącym żądaniu. W sekcji mode=copy zasad ruchu wychodzącego nie inicjuje treści żądania. Wyrażenia zasad są dozwolone. Nie. new
nazwa-zmiennej odpowiedzi Nazwa zmiennej kontekstowej, która otrzyma obiekt odpowiedzi. Jeśli zmienna nie istnieje, zostanie utworzona po pomyślnym wykonaniu zasad i stanie się dostępna za pośrednictwem context.Variable kolekcji. Wyrażenia zasad są dozwolone. Tak Nie dotyczy
timeout Interwał limitu czasu w sekundach przed niepowodzeniem wywołania adresu URL. Wyrażenia zasad są dozwolone. Nie. 60
ignoruj błąd Jeśli true żądanie spowoduje wystąpienie błędu, błąd zostanie zignorowany, a zmienna odpowiedzi będzie zawierać wartość null. Wyrażenia zasad nie są dozwolone. Nie. false

Elementy

Element opis Wymagania
set-url Adres URL żądania. Wyrażenia zasad są dozwolone. Nie, jeśli mode=copy; w przeciwnym razie tak.
set-method Ustawia metodę żądania. Wyrażenia zasad nie są dozwolone. Nie, jeśli mode=copy; w przeciwnym razie tak.
set-header Ustawia nagłówek w żądaniu. Użyj wielu set-header elementów dla wielu nagłówków żądań. Nie.
set-body Ustawia treść żądania. Nie.
uwierzytelnianie certyfikatu Certyfikat do użycia na potrzeby uwierzytelniania klienta określonego w atrybucie thumbprint . Nie.
Serwera proxy Kieruje żądanie za pośrednictwem serwera proxy HTTP. Nie.

Użycie

  • Sekcje zasad: ruch przychodzący, wychodzący, zaplecze, błąd
  • Zakresy zasad: globalny, obszar roboczy, produkt, interfejs API, operacja
  • Bramy: dedykowane, zużycie, hostowane samodzielnie

Uwagi dotyczące użycia

Jeśli wystąpienie usługi API Management jest wdrażane (wstrzykiwane) w sieci wirtualnej w trybie wewnętrznym i używasz tych zasad do wysyłania żądania interfejsu API do interfejsu API uwidocznionego w tym samym wystąpieniu usługi API Management, może wystąpić przekroczenie limitu czasu z błędem HTTP 500 Backend Połączenie ionFailure. Jest to wynik ograniczenia usługi Azure Load Balancer.

Aby połączyć żądania interfejsu API z bramą w tym scenariuszu, skonfiguruj adres set-url URL https://127.0.0.1sprzężenia zwrotnego localhost. Ponadto ustaw HOST nagłówek, aby określić hosta bramy tego wystąpienia usługi API Management. Możesz użyć domyślnego azure-api.net lub niestandardowego hosta domeny. Na przykład:

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

Aby uzyskać więcej informacji, zobacz ten wpis w blogu.

Przykład

W tym przykładzie pokazano jeden ze sposobów weryfikacji tokenu referencyjnego przy użyciu serwera autoryzacji. Aby uzyskać więcej informacji na temat tego przykładu, zobacz Używanie usług zewnętrznych z usługi 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>

Aby uzyskać więcej informacji na temat pracy z zasadami, zobacz: