Delen via


Typen inhoud in Azure Logic Apps afhandelen

Van toepassing op: Azure Logic Apps (Verbruik + Standard)

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

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 alle aanvragen op en verwerkt deze met het inhoudstype application/json als een JSON-object (JavaScript Object Notation). Standaard kunt u JSON-inhoud parseren zonder cast-inhoud. Als u een aanvraag met een header met het inhoudstype 'application/json' wilt parseren, kunt u een expressie gebruiken. In dit voorbeeld wordt de waarde dog van de animal-type matrix geretourneerd zonder cast-conversie:

@body('myAction')['client']['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())['client']['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 raadplegen en gebruiken in de werkstroom van uw logische app.

  • Aanvraagtrigger

    Wanneer u deze trigger gebruikt in Logic App Designer, 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 deze eigenschappen vervolgens eenvoudig raadplegen en 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 Enter een voorbeeld van een JSON-nettolading op of plak deze en kies Vervolgens Gereed. Voorbeeld:

      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 de waarde van de header instelt op application/json.

  • JSON-actie parseren

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

    JSON parseren

text/plain

Wanneer uw logische app HTTP-berichten ontvangt waarop de Content-Type header is ingesteld text/plain, worden deze berichten in onbewerkte vorm opgeslagen in uw logische app. 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 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 die tekst zonder opmaak bevatten, 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 en application/octet-stream

Logic Apps behoudt altijd de Content-Type ontvangen HTTP-aanvraag of -reactie. Dus als uw logische app inhoud ontvangt waarop Content-Type deze is ingesteld application/octet-streamen u die inhoud in een latere actie opneemt zonder te casten, is Content-Type de uitgaande aanvraag ook ingesteld op application/octet-stream. Op die manier kan Logic Apps garanderen dat gegevens niet 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.

Conversieprogrammafuncties

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-type, die automatisch worden geconverteerd, behouden blijven.

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 met base64 gecodeerde tekenreeks
  • 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 waarop Content-Type deze is ingesteld 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() en functies en triggerBody() deze inhoud later gebruiken. U kunt de @xpath(xml(triggerBody()), '/CustomerName') expressie ook gebruiken met de xpath() en xml() functies.

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

U kunt de gegevens ook handmatig openen met behulp van een expressie zoals in 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 cast-conversie met behulp van een expressie zoals @body('formdataAction'). Deze methode werkt echter alleen wanneer 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 is gecodeerd.