Freigeben über


Behandeln von Inhaltstypen in Azure Logic Apps

Gilt für: Azure Logic Apps (Verbrauch + Standard)

Azure Logic Apps unterstützt alle Inhaltstypen wie JSON, XML, Flat files und Binärdaten. Während einige Inhaltstypen systemeigene Unterstützung haben, was bedeutet, dass sie keine Umwandlung oder Konvertierung benötigen, benötigen andere Inhaltstypen einige Arbeit, um Ihnen das erforderliche Format zu geben.

Um die beste Methode zur Behandlung von Inhalten oder Daten in Workflows zu ermitteln, verwendet Azure Logic Apps den Content-Type Headerwert in den HTTP-Anforderungen, die Workflows von externen Aufrufen abrufen.

Die folgende Liste enthält einige Beispielwerte Content-Type , auf die ein Workflow stoßen kann:

In diesem Handbuch wird beschrieben, wie Azure Logic Apps unterschiedliche Inhaltstypen verarbeitet und zeigt, wie diese Typen bei Bedarf richtig umgewandelt oder konvertiert werden.

Anwendung/json

Bei einer HTTP-Anforderung, bei der der Content-Type Headerwert "application/json" lautet, speichert und behandelt Azure Logic Apps den Inhalt als JavaScript Object Notation (JSON)-Objekt. Standardmäßig können Sie JSON-Inhalte ohne Umwandlung oder Konvertierung analysieren. Sie können diesen Inhalt auch mithilfe eines Ausdrucks analysieren.

Der folgende Ausdruck verwendet z. B. die body() Funktion mit My_action, die den JSON-Namen für eine Vorgängeraktion im Workflow darstellt:

body('My_action')['client']['animal-type'][0]

Die folgenden Schritte beschreiben, wie der Ausdruck ohne Umwandlung oder Konvertierung funktioniert:

  1. Die body() Funktion ruft das body Ausgabeobjekt aus der My_action Aktion ab.

  2. Vom zurückgegebenen body Objekt greift die Funktion auf das client Objekt zu.

    Das client Objekt enthält die animal-type Eigenschaft, die auf ein Array festgelegt ist.

  3. Die Funktion greift auf das erste Element im Array zu und gibt den Wert „dog“ ohne Umwandlung oder Konvertierung direkt zurück.

Wenn Sie mit JSON-Daten arbeiten, die keinen Header verwenden Content-Type , können Sie diese Daten mithilfe der json()-Funktion manuell in JSON konvertieren, z. B.:

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

  1. Die triggerBody() Funktion ruft das body Objekt aus der Triggerausgabe des Workflows ab. Dieses Objekt ist in der Regel ein JSON-Objekt.

    Die Quelle für das body Objekt stammt aus der eingehenden HTTP-Anforderung oder dem Ereignis, das vom Workflowtrigger empfangen wird.

  2. Die json() Funktion analysiert das body von der triggerBody() Funktion zurückgegebene Objekt explizit als JSON-Objekt.

    Dieses Verhalten ist beispielsweise hilfreich, wenn der Triggertext eine Zeichenfolge ist, die eine Verarbeitung als JSON erfordert.

Das verbleibende Ausdrucksverhalten ähnelt dem vorherigen Beispiel.

Erstellen von Token für JSON-Eigenschaften

In Azure Logic Apps können Sie benutzerfreundliche Token generieren, die die Eigenschaften in JSON-Inhalten darstellen. Anschließend können Sie diese Token verwenden, damit Sie einfacher auf diese Eigenschaften und deren Werte in Ihrem Workflow verweisen können.

In der folgenden Liste werden allgemeine Workflowvorgänge und die entsprechenden Möglichkeiten zum Generieren von Token für Eigenschaften in JSON-Inhalten beschrieben:

  • Anforderungstrigger mit dem Namen "Wenn eine HTTP-Anforderung empfangen wird"

    Wenn Sie im Designer mit dem Anforderungstrigger arbeiten, können Sie optional ein JSON-Schema bereitstellen, das die JSON-Objekte, Eigenschaften und die erwarteten Datentypen für jeden Eigenschaftswert definiert. Wenn Sie nicht über ein JSON-Schema verfügen, können Sie eine Beispielnutzlast bereitstellen, um ein JSON-Schema zu generieren, das Sie verwenden können.

    Der Trigger verwendet das Schema, um JSON-Inhalte aus eingehenden HTTP-Anforderungen zu analysieren und Token zu generieren, die die Eigenschaften im JSON-Inhalt darstellen. Sie können dann ganz einfach auf diese Eigenschaften und deren Werte in nachfolgenden Aktionen in Ihrem Workflow verweisen und verwenden.

    Die folgenden Schritte beschreiben, wie Sie eine Beispielnutzlast zum Generieren eines JSON-Schemas bereitstellen können:

    1. Wählen Sie im Designer den Auslöser "Anforderung" aus, um den Informationsbereich zu öffnen.

    2. Wählen Sie auf der Registerkarte Parameter im Feld JSON-Schema für Anforderungstext die Option Beispielnutzdaten zum Generieren eines Schemas verwenden aus.

    3. Geben Sie im Feld zum Eingeben oder Einfügen eines BEISPIEL-JSON-Nutzlasts eine Beispielnutzlast ein, und wählen Sie dann "Fertig" aus.

      Screenshot: Anforderungstrigger „Beim Empfang einer HTTP-Anforderung“ und JSON-Beispielnutzdaten

      Das generierte Schema wird jetzt in Ihrem Trigger angezeigt.

      Screenshot des JSON-Schemas, das aus der JSON-Beispielnutzlast generiert wurde.

      Im Codeansicht-Editor können Sie die zugrunde liegende JSON-Definition für den Anforderungstrigger überprüfen:

      "triggers": { 
         "When_an_HTTP_request_is_received": {
            "type": "Request",
            "kind": "Http",
            "inputs": { 
               "schema": {
                  "type": "object",
                  "properties": {
                     "client": {
                        "type": "object",
                        "properties": {
                           "animal-type": {
                              "type": "array",
                              "items": {
                                 "type": "string"
                              },
                           },
                           "name": {
                              "type": "string"
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      
    4. Um den Workflow auszulösen, rufen Sie die Workflow-URL oder die HTTP-URL des Triggers ab, die generiert wird, nachdem Sie den Workflow zum ersten Mal gespeichert haben.

    5. Verwenden Sie zum Testen des Workflows ein Clienttool oder eine App, aus dem Sie eine HTTP-Anforderung an die Workflow-URL oder trigger-URL senden können. Stellen Sie sicher, dass die Anforderung einen Header mit dem Namen "Content-Type " enthält und der Headerwert auf "application/json" festgelegt ist.

  • JSON-Analyseaktion

    Wenn Sie diese Aktion im Designer verwenden, können Sie die JSON-Ausgabe analysieren und benutzerfreundliche Token generieren, die die Eigenschaften in Ihrem JSON-Inhalt darstellen. Sie können dann in Ihrem Logik-App-Workflow ganz einfach auf diese Eigenschaften verweisen und sie verwenden.

    Ähnlich wie beim Anforderungstrigger können Sie ein JSON-Schema eingeben oder generieren, das den JSON-Inhalt beschreibt, den Sie analysieren möchten. Auf diese Weise können Sie leichter Daten von Azure Service Bus, Azure Cosmos DB usw. nutzen.

    Screenshot einer JSON-Parse-Aktion mit einem Schema, das aus einem Beispiel generiert wurde.

text/plain

Wenn Ihr Workflow HTTP-Anforderungen empfängt, bei denen der Content-Type Headerwert text/plain ist. Azure Logic Apps speichert und behandelt den Inhalt in unformatierter Form. Wenn Sie diesen Inhalt in nachfolgenden Workflowaktionen ohne Konvertierung oder Umwandlung verwenden oder auf ihn verweisen, wird auch bei ausgehenden Anforderungen der Headerwert Content-Type auf text/plain gesetzt.

Angenommen, Sie arbeiten mit einer Flachdatei, und die eingehende HTTP-Anforderung hat den Content-Type Headerwert auf text/plain:

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

Wenn Sie diese Anforderung an eine nachfolgende Aktion senden, die den Anforderungstext zum Senden einer anderen Anforderung verwendet, ist der Headerwert der zweiten Anforderung auch auf Content-Type festgelegt text/plain. Wenn Sie mit Daten in Nur-Text arbeiten, aber keine Kopfzeile angegeben haben, können Sie diese Daten mithilfe der string() Funktion manuell in Text umwandeln, z. B.:

string(triggerBody())

application/xml und application/octet-stream

Azure Logic Apps behält den Content-Type Headerwert in einer eingehenden HTTP-Anforderung oder -Antwort immer bei. Wenn Ihr Workflow Inhalt empfängt, bei dem Content-Type auf application/octet-stream festgelegt ist, und Sie diesen Inhalt ohne Umwandlung in eine nachfolgende Aktion einschließen, legt die ausgehende Anforderung Content-Type ebenfalls auf application/octet-stream fest. Durch diesen Ansatz wird sichergestellt, dass Daten beim Navigieren durch den Workflow nicht verloren gehen. In zustandsbehafteten Workflows werden der Zustand, eingaben und Ausgaben der nachfolgenden Aktion in einem JSON-Objekt gespeichert, während der Zustand durch den Workflow bewegt wird.

Konvertierungsfunktionen

Um einige Datentypen beizubehalten, konvertiert Azure Logic Apps Inhalte in eine binäre base64-codierte Zeichenfolge. Diese Zeichenfolge enthält die entsprechenden Metadaten, die sowohl die $content-Nutzdaten als auch den $content-type beibehalten, die automatisch konvertiert werden.

In der folgenden Liste wird beschrieben, wie Azure Logic Apps Inhalte konvertiert, wenn Sie bestimmte Funktionen verwenden:

  • json(): Wandelt Daten in application/json.
  • xml(): Wandelt Daten in application/xml.
  • binary(): Wandelt Daten in application/octet-stream.
  • string(): Wandelt Daten in text/plain.
  • base64(): Konvertiert Inhalt in eine base64-codierte Zeichenfolge.
  • base64toString(): Konvertiert eine base64-codierte Zeichenfolge in text/plain.
  • base64toBinary(): Konvertiert eine base64-codierte Zeichenfolge in application/octet-stream.
  • dataUri(): Konvertiert eine Zeichenfolge in einen Daten-URI.
  • dataUriToBinary(): Wandelt einen Daten-URI in eine binäre Zeichenfolge um.
  • dataUriToString(): Konvertiert einen Daten-URI in eine Zeichenfolge.

Angenommen, Ihr Workflow-Trigger empfängt eine HTTP-Anforderung, bei der Content-Type auf application/xml festgelegt ist und der Inhalt dem folgenden Beispiel ähnelt:

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

Sie können diesen Inhalt mithilfe des folgenden Ausdrucks umwandeln, der die Funktionen xml() und triggerBody() verwendet:

xml(triggerBody())

Anschließend können Sie den resultierenden Inhalt mit nachfolgenden Aktionen im Workflow verwenden. Sie könnten stattdessen den folgenden Ausdruck verwenden, der die xpath()- und xml()-Funktionen verwendet:

xpath(xml(triggerBody()), '/CustomerName')

Andere Inhaltstypen

Azure Logic Apps unterstützt andere Inhaltstypen, erfordert jedoch möglicherweise, dass Sie den Nachrichtentext manuell aus einer HTTP-Anforderung abrufen, indem Sie die $content Variable decodieren.

Angenommen, Ihr Workflow empfängt eine HTTP-Anforderung, bei der Content-Type auf application/x-www-url-formencoded festgelegt ist. Um alle Daten beizubehalten, enthält der Anforderungstext die $content Variable, in der die Nutzlast als base64-Zeichenfolge codiert ist:

CustomerName=Frank&Address=123+Avenue

Dieser Inhaltstyp ist nicht im Nur-Text- oder JSON-Format vorhanden, daher speichert Azure Logic Apps CustomerName=Frank&Address=123+Avenue mithilfe der folgenden $content-type und $content Variablen:

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

Azure Logic Apps enthält auch systemeigene Funktionen zum Behandeln von Formulardaten, z. B.:

Sie können auch manuell auf die Daten zugreifen, indem Sie einen Ausdruck wie das folgende Beispiel verwenden:

string(body('formdataAction'))

Um eine ausgehende Anforderung zu stellen, verwenden Sie application/x-www-url-formencoded als Content-Type-Headerwert. Fügen Sie den Anforderungsinhalt ohne Umwandlung mithilfe eines Ausdrucks wie body('formdataAction') dem Aktionskörper hinzu. Diese Methode funktioniert nur, wenn der Aktionskörper der einzige Parameter im body Eingabeparameterobjekt ist. Wenn Sie den body('formdataAction') Ausdruck in einer Anforderung verwenden, deren Inhaltstyp application/json ist, erhalten Sie einen Laufzeitfehler, da der Nachrichtentext codiert gesendet wird.