Typen inhoud in Azure Logic Apps afhandelen

Van toepassing op: Azure Logic Apps (verbruik + standaard)

Verschillende inhoudstypen kunnen door een logische app stromen, bijvoorbeeld JSON, XML, platte bestanden en binaire gegevens. Logic Apps ondersteunt alle inhoudstypen, maar sommige hebben systeemeigen ondersteuning en vereisen geen cast-conversie of conversie in uw logische apps. Voor andere typen is mogelijk cast-conversie of conversie vereist. In dit artikel wordt beschreven hoe Logic Apps inhoudstypen verwerkt en hoe u deze typen zo nodig correct kunt casten of converteren.

Om de juiste manier te bepalen voor het verwerken van inhoudstypen, is Logic Apps afhankelijk van de Content-Type headerwaarde in HTTP-aanroepen, bijvoorbeeld:

application/json

Logic Apps slaat aanvragen met het inhoudstype toepassing/json op en verwerkt deze als een JSON-object (JavaScript Notation). Standaard kunt u JSON-inhoud parseren zonder casting. Als u een aanvraag wilt parseren met een header met het inhoudstype 'application/json', kunt u een expressie gebruiken. In dit voorbeeld wordt de waarde dog uit de animal-type matrix geretourneerd zonder cast:

@body('myAction')['animal-type'][0]

{
  "client": {
     "name": "Fido",
     "animal-type": [ "dog", "cat", "rabbit", "snake" ]
  }
}

Als u werkt met JSON-gegevens die geen header opgeven, kunt u die gegevens handmatig naar JSON casten met behulp van de functie json(), bijvoorbeeld:

@json(triggerBody())['animal-type']

Tokens maken voor JSON-eigenschappen

Logic Apps biedt u de mogelijkheid om gebruiksvriendelijke tokens te genereren die de eigenschappen in JSON-inhoud vertegenwoordigen, zodat u deze eigenschappen gemakkelijker kunt gebruiken in de werkstroom van uw logische app.

  • Aanvraagtrigger

    Wanneer u deze trigger gebruikt in het Designer van de logische app, kunt u een JSON-schema opgeven waarin de nettolading wordt beschreven die u verwacht te ontvangen. De ontwerper parseert JSON-inhoud met behulp van dit schema en genereert gebruiksvriendelijke tokens die de eigenschappen in uw JSON-inhoud vertegenwoordigen. U kunt vervolgens eenvoudig verwijzen naar deze eigenschappen en deze gebruiken in de werkstroom van uw logische app.

    Als u geen schema hebt, kunt u het schema genereren.

    1. Selecteer in de aanvraagtrigger Voorbeeldpayload gebruiken om een schema te genereren.

    2. Geef onder Een voorbeeld van een JSON-nettolading invoeren of plakken een voorbeeldpayload op en kies gereed. Bijvoorbeeld:

      Schermopname van de actie 'Wanneer een HTTP-aanvraag wordt ontvangen' met een voorbeeld van een JSON-nettolading.

      Het gegenereerde schema wordt nu weergegeven in uw trigger.

      Voorbeeld van JSON-nettolading opgeven

      Dit is de onderliggende definitie voor uw aanvraagtrigger in de codeweergave-editor:

      "triggers": { 
         "manual": {
            "type": "Request",
            "kind": "Http",
            "inputs": { 
               "schema": {
                  "type": "object",
                  "properties": {
                     "client": {
                        "type": "object",
                        "properties": {
                           "animal-type": {
                              "type": "array",
                              "items": {
                                 "type": "string"
                              },
                           },
                           "name": {
                              "type": "string"
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      
    3. Zorg ervoor dat u in de HTTP-aanvraag die uw client-app naar Azure Logic Apps verzendt, een header met de naam Content-Type opneemt en stel de waarde van de header in op application/json.

  • JSON-actie parseren

    Wanneer u deze actie gebruikt in het Designer van de logische app, kunt u JSON-uitvoer parseren en gebruiksvriendelijke tokens genereren die de eigenschappen in uw JSON-inhoud vertegenwoordigen. U kunt vervolgens eenvoudig verwijzen naar deze eigenschappen en deze gebruiken in de werkstroom van uw logische app. Net als bij de aanvraagtrigger kunt u een JSON-schema opgeven of genereren waarin de JSON-inhoud wordt beschreven die u wilt parseren. Op die manier kunt u eenvoudiger gegevens gebruiken uit Azure Service Bus, Azure Cosmos DB, enzovoort.

    JSON parseren

tekst/tekst zonder opmaak

Wanneer uw logische app HTTP-berichten ontvangt waarvoor de Content-Type koptekst is ingesteld op text/plain, slaat uw logische app deze berichten op in onbewerkte vorm. Als u deze berichten opneemt in volgende acties zonder cast-conversie, worden aanvragen verzonden met de Content-Type koptekst ingesteld op text/plain.

Als u bijvoorbeeld met een plat bestand werkt, krijgt u mogelijk een HTTP-aanvraag met de Content-Type header ingesteld op text/plain inhoudstype:

Date,Name,Address
Oct-1,Frank,123 Ave

Als u deze aanvraag vervolgens in een latere actie verzendt als de hoofdtekst voor een andere aanvraag, bijvoorbeeld , @body('flatfile')heeft die tweede aanvraag ook een Content-Type header die is ingesteld op text/plain. Als u werkt met gegevens zonder opmaak, maar geen koptekst hebt opgegeven, kunt u die gegevens handmatig naar tekst casten met behulp van de functie string(), zoals deze expressie:

@string(triggerBody())

application/xml and application/octet-stream

Logic Apps behoudt altijd de Content-Type in een ontvangen HTTP-aanvraag of -antwoord. Dus als uw logische app inhoud ontvangt met ingesteld op application/octet-streamen u die inhoud in een latere actie opneemt zonder casten, is Content-Type de uitgaande aanvraag ook ingesteld op application/octet-stream.Content-Type Op die manier kan Logic Apps garanderen dat er geen gegevens verloren gaan tijdens het doorlopen van de werkstroom. De actiestatus, of invoer en uitvoer, wordt echter opgeslagen in een JSON-object terwijl de status door de werkstroom wordt verplaatst.

Conversiefuncties

Als u bepaalde gegevenstypen wilt behouden, converteert Logic Apps inhoud naar een binaire base64-gecodeerde tekenreeks met de juiste metagegevens die zowel de $content nettolading als de $content-typebehouden, die automatisch worden geconverteerd.

In deze lijst wordt beschreven hoe Logic Apps inhoud converteert wanneer u deze functies gebruikt:

  • json(): Casts data to application/json
  • xml(): Casts data to application/xml
  • binary(): Casts data to application/octet-stream
  • string(): Casts data to text/plain
  • base64(): converteert inhoud naar een tekenreeks met base64-codering
  • base64toString(): converteert een met base64 gecodeerde tekenreeks naar text/plain
  • base64toBinary(): converteert een met base64 gecodeerde tekenreeks naar application/octet-stream
  • dataUri(): converteert een tekenreeks naar een gegevens-URI
  • dataUriToBinary(): converteert een gegevens-URI naar een binaire tekenreeks
  • dataUriToString(): converteert een gegevens-URI naar een tekenreeks

Als u bijvoorbeeld een HTTP-aanvraag ontvangt waarbij Content-Type deze is ingesteld op application/xml, zoals deze inhoud:

<?xml version="1.0" encoding="UTF-8" ?>
<CustomerName>Frank</CustomerName>

U kunt deze inhoud casten met behulp van de @xml(triggerBody()) expressie met de xml() functies en triggerBody() en deze inhoud later gebruiken. Of u kunt de @xpath(xml(triggerBody()), '/CustomerName') expressie gebruiken met de xpath() functies en xml() .

Andere inhoudstypen

Logic Apps werkt met en ondersteunt andere inhoudstypen, maar mogelijk moet u de berichttekst handmatig ophalen door de $content variabele te decoderen.

Stel dat uw logische app wordt geactiveerd door een aanvraag met het application/x-www-url-formencoded inhoudstype. Als u alle gegevens wilt behouden, heeft de $content variabele in de aanvraagtekst een nettolading die is gecodeerd als een base64-tekenreeks:

CustomerName=Frank&Address=123+Avenue

Omdat de aanvraag geen tekst zonder opmaak of JSON is, wordt de aanvraag als volgt opgeslagen in de actie:

"body": {
   "$content-type": "application/x-www-url-formencoded",
   "$content": "AAB1241BACDFA=="
}

Logic Apps biedt systeemeigen functies voor het verwerken van formuliergegevens, bijvoorbeeld:

Of u kunt handmatig toegang krijgen tot de gegevens met behulp van een expressie zoals dit voorbeeld:

@string(body('formdataAction'))

Als u wilt dat de uitgaande aanvraag dezelfde application/x-www-url-formencoded header van het inhoudstype heeft, kunt u de aanvraag toevoegen aan de hoofdtekst van de actie zonder casten met behulp van een expressie zoals @body('formdataAction'). Deze methode werkt echter alleen als de hoofdtekst de enige parameter in de body invoer is. Als u de @body('formdataAction') expressie in een application/json aanvraag probeert te gebruiken, krijgt u een runtimefout omdat de hoofdtekst gecodeerd wordt verzonden.