Hoofdtekst instellen

VAN TOEPASSING OP: Alle API Management-lagen

Gebruik het set-body beleid om de berichttekst in te stellen voor een aanvraag of antwoord. Voor toegang tot de hoofdtekst van het bericht kunt u de context.Request.Body eigenschap of de context.Response.Bodyeigenschap gebruiken, afhankelijk van of het beleid zich in de binnenkomende of uitgaande sectie bevindt.

Belangrijk

Wanneer u de hoofdtekst context.Request.Body van het bericht gebruikt of context.Response.Body, gaat de oorspronkelijke berichttekst standaard verloren en moet deze worden ingesteld door de hoofdtekst terug te sturen in de expressie. Als u de hoofdtekstinhoud wilt behouden, stelt u de preserveContent parameter true in op bij het openen van het bericht. Als preserveContent deze is ingesteld true op en een andere hoofdtekst wordt geretourneerd door de expressie, wordt de geretourneerde hoofdtekst gebruikt.

Notitie

Stel de elementen en onderliggende elementen van het beleid in de volgorde in die in de beleidsverklaring is opgegeven. Meer informatie over het instellen of bewerken van API Management-beleid.

Beleidsinstructie

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

Kenmerken

Kenmerk Beschrijving Vereist Standaardinstelling
sjabloon Wordt gebruikt om de tijdelijke modus te wijzigen waarin het set-body beleid wordt uitgevoerd. Momenteel is de enige ondersteunde waarde:

- liquid - het set-body beleid zal de vloeistofverleidingsmotor gebruiken
Nee N.v.t.
xsi-nil Wordt gebruikt om te bepalen hoe elementen die zijn gemarkeerd xsi:nil="true" , worden weergegeven in XML-nettoladingen. Ingesteld op een van de volgende waarden:

- blank - nil wordt weergegeven met een lege tekenreeks.
- null - nil wordt weergegeven met een null-waarde.

Beleidsexpressies zijn niet toegestaan.
Nee blank
parseringsdatum Booleaans. Hiermee geeft u op of tekenreeksen met datumnotatie (bijvoorbeeld "/Date(1198908717056)/", "2012-03-21T05:40Z") worden geparseerd naar System.DateTime (mm/dd/yyyy hh:mm:ss). Als deze waarde is ingesteld false, worden datumwaarden gewoon gekopieerd.

Beleidsexpressies zijn niet toegestaan.
Nee true

Voor toegang tot informatie over de aanvraag en het antwoord kan de Liquid-sjabloon worden verbonden met een contextobject met de volgende eigenschappen:

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

Gebruik

Gebruiksnotities

  • Als u het set-body beleid gebruikt om een nieuwe of bijgewerkte hoofdtekst te retourneren, hoeft u niet in te stellen preserveContenttrue op omdat u expliciet de nieuwe hoofdtekstinhoud opgeeft.
  • Het behouden van de inhoud van een antwoord in de binnenkomende pijplijn is niet logisch omdat er nog geen antwoord is.
  • Het behouden van de inhoud van een aanvraag in de uitgaande pijplijn is niet logisch omdat de aanvraag op dit moment al naar de back-end is verzonden.
  • Als dit beleid wordt gebruikt wanneer er geen berichttekst is, bijvoorbeeld in een inkomend verkeer GET, wordt er een uitzondering gegenereerd.

Zie de secties context.Response.Bodyin de context.Request.Bodytabel Contextvariabele voor IMessageBody meer informatie.

Liquid-sjablonen gebruiken met set-body

Het set-body beleid kan worden geconfigureerd voor het gebruik van de liquid-tempatietaal om de hoofdtekst van een aanvraag of antwoord te transformeren. Dit kan effectief zijn als u de indeling van uw bericht volledig opnieuw moet vormgeven.

Belangrijk

De implementatie van Liquid die in het set-body beleid wordt gebruikt, wordt geconfigureerd in de C#-modus. Dit is met name belangrijk bij het uitvoeren van dingen zoals filteren. Als voorbeeld vereist het gebruik van een datumfilter het gebruik van Pascal-hoofdlettergebruik en C#-datumopmaak, bijvoorbeeld:

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

Belangrijk

Als u een XML-hoofdtekst correct wilt binden met behulp van de Liquid-sjabloon, gebruikt u een set-header beleid om Inhoudstype in te stellen op toepassing/xml, tekst/xml (of elk type dat eindigt op +xml). Voor een JSON-hoofdtekst moet dit application/json, text/json zijn (of elk type dat eindigt op +json).

Belangrijk

Liquid-sjablonen gebruiken de aanvraag-/antwoordtekst in de huidige uitvoeringspijplijn als invoer. Daarom werken liquide sjablonen niet wanneer ze worden gebruikt binnen een retourresponsbeleid. Een retourantwoordbeleid annuleert de huidige uitvoeringspijplijn en verwijdert de aanvraag-/antwoordtekst. Als gevolg hiervan ontvangt elke vloeistofsjabloon die in het retourantwoord wordt gebruikt, een lege tekenreeks als invoer en wordt de verwachte uitvoer niet geproduceerd.

Ondersteunde liquide filters

De volgende Liquid-filters worden ondersteund in het set-body beleid. Zie de Liquid-documentatie voor filtervoorbeelden.

Notitie

Voor het beleid is Pascal-casing vereist voor Liquid-filternamen (bijvoorbeeld 'AtLeast' in plaats van 'at_least').

  • Abs
  • Toevoegen
  • AtLeast
  • AtMost
  • Profiteren
  • Comprimeren
  • Valuta
  • Datum
  • Standaardinstelling
  • DividedBy
  • Kleine letters
  • Escape
  • First
  • H
  • Deelnemen
  • Last
  • Lstrip
  • Overzicht
  • Min
  • Modulo
  • NewlineToBr
  • Plus
  • Prepend
  • Verwijderen
  • RemoveFirst
  • Replace
  • ReplaceFirst
  • Round
  • Rstrip
  • Tekengrootte
  • Segment
  • Sort
  • Split
  • Strip
  • StripHtml
  • StripNewlines
  • Times
  • Truncate
  • TruncateWords
  • Uniq
  • Hoofdletters
  • UrlDecode
  • UrlEncode

Voorbeelden

Letterlijke tekst

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

De hoofdtekst openen als een tekenreeks

We behouden de oorspronkelijke aanvraagbody, zodat we deze later in de pijplijn kunnen openen.

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

De hoofdtekst openen als een JObject

Omdat we de oorspronkelijke aanvraagbody niet reserveren, resulteert het later openen in de pijplijn in een uitzondering.

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

Antwoord filteren op basis van product

In dit voorbeeld ziet u hoe u inhoudsfiltering uitvoert door gegevenselementen te verwijderen uit het antwoord dat is ontvangen van een back-endservice wanneer u het Starter product gebruikt. Het voorbeeld van een back-endantwoord bevat eigenschappen op hoofdniveau die vergelijkbaar zijn met de OpenWeather One-aanroep-API.

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

JSON converteren naar SOAP met behulp van een Liquid-sjabloon

<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 transformeren met behulp van een Liquid-sjabloon

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

Toegang tot de hoofdtekst als met URL gecodeerde formuliergegevens

In het volgende voorbeeld wordt de AsFormUrlEncodedContent() expressie gebruikt om toegang te krijgen tot de aanvraagbody als met URL gecodeerde formuliergegevens (inhoudstype application/x-www-form-urlencoded) en converteert deze vervolgens naar JSON. Omdat we de oorspronkelijke aanvraagbody niet reserveren, resulteert het later openen in de pijplijn in een uitzondering.

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

Hoofdtekst openen en retourneren als met URL gecodeerde formuliergegevens

In het volgende voorbeeld wordt de AsFormUrlEncodedContent() expressie gebruikt om toegang te krijgen tot de aanvraagbody als door URL gecodeerde formuliergegevens (inhoudstype application/x-www-form-urlencoded), voegt gegevens toe aan de nettolading en retourneert URL-gecodeerde formuliergegevens. Omdat we de oorspronkelijke aanvraagbody niet reserveren, resulteert het later openen in de pijplijn in een uitzondering.

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

Zie voor meer informatie over het werken met beleid: