إرسال طلب

ينطبق على: جميع مستويات إدارة واجهة برمجة التطبيقات

يرسل نهج send-request الطلب المتوفر إلى محدد موقع المعلومات المحدد، ولا ينتظر أكثر من قيمة المهلة المحددة.

إشعار

تعيين عناصر النهج والعناصر التابعة بالترتيب الوارد في بيان النهج. تعلم كيفية إعداد نُهج 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>

سمات

السمة ‏‏الوصف مطلوبة افتراضي
الوضع تحديد ما إذا كان هذا new طلبا أو أحد copy العناوين والنص الأساسي في الطلب الحالي. في قسم النهج الصادر، mode=copy لا يقوم بتهيئة نص الطلب. يتم السماح بتعبيرات النهج. لا new
اسم متغير الاستجابة اسم متغير السياق الذي سيتلقى كائن استجابة. إذا لم يكن المتغير موجوداً، فسيتم إنشاؤه عند التنفيذ الناجح للسياسة وسيصبح متاحاً للوصول عبر المجموعة context.Variable. يتم السماح بتعبيرات النهج. ‏‏نعم‬ غير متوفر
المهلة الفاصل الزمني المهلة بالثواني قبل فشل الاستدعاء إلى عنوان URL. يتم السماح بتعبيرات النهج. لا 60
تجاهل الخطأ إذا ونتج true عن الطلب خطأ، فسيتم تجاهل الخطأ، وسيحتوي متغير الاستجابة على قيمة خالية. تعبيرات النهج غير مسموح بها. لا false

عناصر

العنصر الوصف مطلوب
set-url عنوان URL للطلب. يتم السماح بتعبيرات النهج. لا إذا كان mode=copy؛ وإلا نعم.
أسلوب التعيين تعيين أسلوب الطلب. تعبيرات النهج غير مسموح بها. لا إذا كان mode=copy؛ وإلا نعم.
تعيين العنوان تعيين رأس في الطلب. استخدم عناصر متعددة set-header لرؤوس طلبات متعددة. لا
تعيين النص الأساسي تعيين نص الطلب. لا
شهادة المصادقة الشهادة المراد استخدامها لمصادقة العميل، المحددة في سمة thumbprint . لا
الوكيل طلب التوجيه عبر وكيل HTTP. لا

الاستخدام

ملاحظات الاستخدام

إذا تم نشر مثيل API Management (إدخاله) في VNet في الوضع الداخلي وكنت تستخدم هذا النهج لإرسال طلب واجهة برمجة تطبيقات إلى واجهة برمجة تطبيقات يتم كشفها في نفس مثيل APIM، فقد تواجه مهلة مع خطأ HTTP 500 Backend الاتصال ionFailure. هذه هي نتيجة قيود موازن تحميل Azure.

لربط طلبات واجهة برمجة التطبيقات بالبوابة في هذا السيناريو، قم بتكوين set-url لاستخدام عنوان URL https://127.0.0.1لرد الحلقة localhost . بالإضافة إلى ذلك، قم بتعيين 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 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>

لمزيد من المعلومات حول العمل مع النُهج، راجع: