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 (systeemeigen type)
- tekst/tekst zonder opmaak (systeemeigen type)
- application/xml and application/octet-stream
- Andere inhoudstypen
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.
Selecteer in de aanvraagtrigger Voorbeeldpayload gebruiken om een schema te genereren.
Geef onder Een voorbeeld van een JSON-nettolading invoeren of plakken een voorbeeldpayload op en kies gereed. Bijvoorbeeld:
Het gegenereerde schema wordt nu weergegeven in uw trigger.
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" } } } } } } } }
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.
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-stream
en 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-type
behouden, die automatisch worden geconverteerd.
In deze lijst wordt beschreven hoe Logic Apps inhoud converteert wanneer u deze functies gebruikt:
-
json()
: Casts data toapplication/json
-
xml()
: Casts data toapplication/xml
-
binary()
: Casts data toapplication/octet-stream
-
string()
: Casts data totext/plain
-
base64()
: converteert inhoud naar een tekenreeks met base64-codering -
base64toString()
: converteert een met base64 gecodeerde tekenreeks naartext/plain
-
base64toBinary()
: converteert een met base64 gecodeerde tekenreeks naarapplication/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.