اقرأ باللغة الإنجليزية

مشاركة عبر


تعيين النص الأساسي

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

استخدم النهج set-body لتعيين نص الرسالة لطلب أو استجابة. للوصول إلى نص الرسالة، يمكنك استخدام الخاصية context.Request.Body أو context.Response.Body، بناءً على ما إذا كان النهج في قسم البريد الوارد أو الصادر.

هام

بشكل افتراضي عند الوصول إلى نص الرسالة باستخدام context.Request.Body أو context.Response.Body، يتم فقدان نص الرسالة الأصلي ويجب تعيينه عن طريق إرجاع النص الأساسي مرة أخرى في التعبير. للحفاظ على محتوى النص، اضبط المعلمة preserveContent على true عند الوصول إلى الرسالة. إذا تم تعيين preserveContent على true وتم إرجاع نص مختلف بواسطة التعبير، فسيتم استخدام النص الذي تم إرجاعه.

ملاحظة

تعيين عناصر النهج والعناصر التابعة بالترتيب الوارد في بيان النهج. تعلم كيفية إعداد نُهج APIM أو تعديلها.

نهج السياسة

<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
    new body value as text
</set-body>

سمات

السمة ‏‏الوصف مطلوبة افتراضي
القالب يستخدم لتغيير وضع ال templating الذي يتم تشغيل النهج set-body فيه. القيمة الوحيدة المدعومة حاليًّا هي:

- liquid - سيستخدم النهج set-body محرك القولبة السائل
لا ‏‫غير متاح
xsi-nil يستخدم للتحكم في كيفية تمثيل العناصر التي تم وضع علامة عليها xsi:nil="true" في حمولات XML. تعيين إلى إحدى القيم التالية:

- blank - nil يتم تمثيل بسلسلة فارغة.
- null - nil يتم تمثيل بقيمة خالية.

تعبيرات النهج غير مسموح بها.
لا blank
parse-date منطقي. تحديد ما إذا كانت السلاسل المنسقة للتاريخ (على سبيل المثال، "/Date(1198908717056)/"، "2012-03-21T05:40Z") يتم تحليلها إلى System.DateTime (mm/dd/yyyy hh:mm:ss). عند التعيين إلى false، يتم نسخ قيم التاريخ ببساطة.

تعبيرات النهج غير مسموح بها.
لا true

للوصول إلى معلومات حول الطلب والاستجابة، يمكن ربط القالب Liquid بعنصر سياق بالخصائص التالية:

context.
    Request.
        Url
        Method
        OriginalMethod
        OriginalUrl
        IpAddress
        MatchedParameters
        HasBody
        ClientCertificates
        Headers

    Response.
        StatusCode
        Method
        Headers
Url.
    Scheme
    Host
    Port
    Path
    Query
    QueryString
    ToUri
    ToString

OriginalUrl.
    Scheme
    Host
    Port
    Path
    Query
    QueryString
    ToUri
    ToString

الاستخدام

  • أقسام النهج: الواردة والصادرة والخلفية
  • نطاقات النهج: العمومية، ومساحة العمل، والمنتج، وواجهة برمجة التطبيقات، والتشغيل
  • البوابات: الكلاسيكية، الإصدار 2، الاستهلاك، المستضافة ذاتيا، مساحة العمل

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

  • إذا كنت تستخدم النهج set-body لإرجاع نص جديد أو محدث، فلن تحتاج إلى التعيين preserveContent إلى true لأنك توفر محتويات النص الأساسي الجديد بشكل صريح.
  • الحفاظ على محتوى الاستجابة في البنية الأساسية لبرنامج ربط العمليات التجارية الواردة غير منطقي لأنه لا توجد استجابة حتى الآن.
  • الاحتفاظ بمحتوى طلب في البنية الأساسية لبرنامج ربط العمليات التجارية الصادر لا معنى له لأن الطلب قد تم إرساله بالفعل إلى الخلفية في هذه المرحلة.
  • إذا تم استخدام هذا النهج عندما لا يكون هناك نص رسالة، على سبيل المثال في وارد GET، يتم طرح استثناء.

لمزيد من المعلومات، راجع أقسام context.Request.Body وcontext.Response.Body وIMessageBody في جدول Context variable.

استخدام قوالب Liquid مع مجموعة النص الأساسي

يمكن تكوين النهجset-body لاستخدام لغةLiquid templating لتحويل نص الطلب أو الاستجابة. يمكن أن يكون هذا فعالاً للغاية إذا كنت بحاجة إلى إعادة تشكيل تنسيق رسالتك بالكامل.

هام

تم تكوين تطبيق Liquid المستخدم في نهج set-body في "الوضع C #". هذا مهم بشكل خاص عند القيام بأشياء مثل عامل التصفية. كمثال، يتطلب استخدام عامل تصفية التاريخ استخدام حالة باسكال وتنسيق تاريخ C #، على سبيل المثال:

{{body.foo.startDateTime| Date:"yyyyMMddTHH:mm:ssZ"}}

هام

للربط بشكل صحيح بنص XML باستخدام Liquid template، استخدم نهجًا set-header لتعيين Content-Type إما إلى application/ xml أو text/ xml (أو أي نوع ينتهي بـ +xml)؛ بالنسبة إلى نص JSON، يجب أن يكون application/ json أو text/ json (أو أي نوع ينتهي بـ +json).

هام

تستخدم القوالب السائلة نص الطلب/الاستجابة في مسار التنفيذ الحالي كمدخل لها. لهذا السبب، لا تعمل القوالب السائلة عند استخدامها داخل نهج الاستجابة للإرجاع. يلغي نهج الاستجابة للإرجاع مسار التنفيذ الحالي ويزيل نص الطلب/الاستجابة. ونتيجة لذلك، سيتلقى أي قالب سائل مستخدم داخل استجابة الإرجاع سلسلة فارغة كإدخل ولن ينتج الإخراج المتوقع.

عوامل تصفية السوائل المدعومة

يتم دعم عوامل تصفية السوائل التالية في النهج set-body. للحصول على أمثلة التصفية، اطلع على الوثائق السائلة.

ملاحظة

يتطلب النهج حالة باسكال لأسماء عوامل التصفية السائلة (على سبيل المثال، "AtLeast" بدلاً من "at_least").

  • Abs
  • إلحاق
  • AtLeast
  • AtMost
  • أحرف كبيرة
  • Compact
  • ‏‏العملة
  • التاريخ
  • الإعداد الافتراضي
  • DividedBy
  • أحرف هابطة
  • Escape
  • First
  • H
  • انضمام
  • Last
  • Lstrip
  • الخريطة
  • ناقص
  • Modulo
  • NewlineToBr
  • زائد
  • إلحاق
  • إزالة
  • RemoveFirst
  • الاستبدال
  • ReplaceFirst
  • جولة
  • Rstrip
  • الحجم
  • شريحة
  • Sort
  • انقسام
  • شريط
  • StripHtml
  • StripNewlines
  • الأوقات
  • اقتطاع
  • TruncateWords
  • Uniq
  • أحرف لأعلى
  • UrlDecode
  • UrlEncode

الأمثلة

نص حرفي

<set-body>Hello world!</set-body>

الوصول إلى النص الأساسي كسلسلة

نحن نحافظ على نص الطلب الأصلي حتى نتمكن من الوصول إليه لاحقا في البنية الأساسية لبرنامج ربط العمليات التجارية.

<set-body>
@{ 
    string inBody = context.Request.Body.As<string>(preserveContent: true); 
    if (inBody[0] =='c') { 
        inBody[0] = 'm'; 
    } 
    return inBody; 
}
</set-body>

الوصول إلى النص الأساسي ك JObject

نظرا لأننا لا نحجز نص الطلب الأصلي، فإن الوصول إليه لاحقا في البنية الأساسية لبرنامج ربط العمليات التجارية سيؤدي إلى استثناء.

<set-body> 
@{ 
    JObject inBody = context.Request.Body.As<JObject>(); 
    if (inBody.attribute == <tag>) { 
        inBody[0] = 'm'; 
    } 
    return inBody.ToString(); 
} 
</set-body>

استجابة عامل التصفية على أساس المنتج

يوضح هذا المثال كيفية إجراء عامل التصفية المحتوى عن طريق إزالة عناصر البيانات من الاستجابة المتلقاة من الخدمة في الخلفية عند استخدام منتج Starter. يتضمن مثال استجابة الواجهة الخلفية خصائص على مستوى الجذر مشابهة لواجهة برمجة تطبيقات مكالمة النظام الأساسي لـ OpenWeather One Call.

<!-- Copy this snippet into the outbound section to remove a number of data elements from the response received from the backend service based on the name of the product -->
<choose>
  <when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
    <set-body>@{
        var response = context.Response.Body.As<JObject>();
        foreach (var key in new [] {"current", "minutely", "hourly", "daily", "alerts"}) {
          response.Property (key).Remove ();
        }
        return response.ToString();
      }
    </set-body>
  </when>
</choose>

Convert JSON to SOAP باستخدامLiquid template

<set-body template="liquid">
    <soap:Envelope xmlns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
            <GetOpenOrders>
                <cust>{{body.getOpenOrders.cust}}</cust>
            </GetOpenOrders>
        </soap:Body>
    </soap:Envelope>
</set-body>

تحويل JSON باستخدام Liquid template

<set-body template="liquid">
{
"order": {
    "id": "{{body.customer.purchase.identifier}}",
    "summary": "{{body.customer.purchase.orderShortDesc}}"
    }
}
</set-body>

الوصول إلى النص الأساسي كبيانات نموذج مشفرة بعنوان URL

يستخدم AsFormUrlEncodedContent() المثال التالي التعبير للوصول إلى نص الطلب كبيانات نموذج مشفرة بعنوان URL (نوع application/x-www-form-urlencodedالمحتوى)، ثم يحولها إلى JSON. نظرا لأننا لا نحجز نص الطلب الأصلي، فإن الوصول إليه لاحقا في البنية الأساسية لبرنامج ربط العمليات التجارية سيؤدي إلى استثناء.

<set-body> 
@{ 
    var inBody = context.Request.Body.AsFormUrlEncodedContent();
    return JsonConvert.SerializeObject(inBody); 
} 
</set-body>

الوصول إلى النص الأساسي وإرجاعه كبيانات نموذج مرمزة بعنوان URL

يستخدم AsFormUrlEncodedContent() المثال التالي التعبير للوصول إلى نص الطلب كبيانات نموذج مشفرة بعنوان URL (نوع application/x-www-form-urlencodedالمحتوى)، ويضيف البيانات إلى الحمولة، ويعيد بيانات النموذج المرمزة بعنوان URL. نظرا لأننا لا نحجز نص الطلب الأصلي، فإن الوصول إليه لاحقا في البنية الأساسية لبرنامج ربط العمليات التجارية سيؤدي إلى استثناء.

<set-body> 
@{ 
    var body = context.Request.Body.AsFormUrlEncodedContent();
    body["newKey"].Add("newValue");
    return body.ToFormUrlEncodedContent(); 
} 
</set-body>

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