YARP Docsv2.3
Dokumentation/Transformationen/Übersicht

Übersicht

Beim Proxying einer Anforderung ist es üblich, Teile der Anforderung oder Antwort zu ändern, um sie an

YARP-Anforderungs- und Antworttransformationen

Einführung

Beim Proxying einer Anforderung ist es üblich, Teile der Anforderung oder Antwort zu ändern, um sie an die Anforderungen des Zielservers anzupassen oder zusätzliche Daten wie die ursprüngliche IP-Adresse des Clients weiterzugeben. Dieser Vorgang wird über Transforms implementiert. Transformationstypen werden global für die Anwendung definiert, und einzelne Routen liefern anschließend die Parameter, um diese Transformationen zu aktivieren und zu konfigurieren. Die ursprünglichen Anforderungsobjekte werden von diesen Transformationen nicht verändert, sondern nur die Proxyanforderungen.

Transformationen des Anforderungs- und Antwortkörpers werden von YARP nicht bereitgestellt, Sie können hierfür jedoch eine Middleware schreiben.

Standardeinstellungen

Die folgenden Transformationen sind standardmäßig für alle Routen aktiviert. Sie können wie später in diesem Dokument gezeigt konfiguriert oder deaktiviert werden.

Host - Unterdrückt den Host-Header der eingehenden Anforderung. Die Proxyanforderung verwendet standardmäßig den in der Zieladresse angegebenen Hostnamen. Siehe RequestHeaderOriginalHost weiter unten. X-Forwarded-For - Setzt die IP-Adresse des Clients in den X-Forwarded-For-Header. Siehe X- Forwarded weiter unten. X-Forwarded-Proto - Setzt das ursprüngliche Schema der Anforderung (http/https) in den X-Forwarded- Proto-Header. Siehe X-Forwarded weiter unten. X-Forwarded-Host - Setzt den ursprünglichen Host der Anforderung in den X-Forwarded-Host-Header. Siehe X-Forwarded weiter unten. X-Forwarded-Prefix - Setzt die ursprüngliche PathBase der Anforderung, falls vorhanden, in den X-Forwarded- Prefix-Header. Siehe X-Forwarded weiter unten.

Zum Beispiel würde die folgende eingehende Anforderung an http://IncomingHost:5000/path :

GET /path HTTP/1.1 Host: IncomingHost:5000 Accept: / header1: foo

mit diesen Standardeinstellungen transformiert und wie folgt an den Zielserver https://DestinationHost:6000/ weitergeleitet

werden:

GET /path HTTP/1.1 Host: DestinationHost:6000 Accept: / header1: foo X-Forwarded-For: 5.5.5.5 X-Forwarded-Proto: http X-Forwarded-Host: IncomingHost:5000

Transformationskategorien

Transformationen lassen sich in einige Kategorien einteilen: Request, Response und Response Trailers. Anforderungs-Trailer werden nicht unterstützt, da sie vom zugrunde liegenden HttpClient nicht unterstützt werden.

Reicht die integrierte Auswahl an Transformationen nicht aus, können über die Erweiterbarkeit benutzerdefinierte Transformationen hinzugefügt werden.

Transformationen hinzufügen

Transformationen können Routen entweder über die Konfiguration oder programmgesteuert hinzugefügt werden.

Über die Konfiguration

Transformationen können über RouteConfig.Transforms konfiguriert und aus dem Abschnitt „Routes“ der Konfigurationsdatei gebunden werden. Diese können geändert und neu geladen werden, ohne den Proxy neu zu starten. Eine Transformation wird über ein oder mehrere Schlüssel-Wert-Paare vom Typ string konfiguriert.

Hier ein Beispiel für gängige Transformationen:

JSON{
   "ReverseProxy": {
      "Routes": {
         "route1" : {
             "ClusterId": "cluster1",
             "Match": {
                "Hosts": [ "localhost" ]
             },
             "Transforms": [
                { "PathPrefix": "/apis" },
                          {
                             "RequestHeader": "header1",
                             "Append": "bar"
                          },
                          {
                             "ResponseHeader": "header2",
                             "Append": "bar",
                             "When": "Always"
                          },
                          { "ClientCert": "X-Client-Cert" },
                          { "RequestHeadersCopy": "true" },
                          { "RequestHeaderOriginalHost": "true" },
                          {
                             "X-Forwarded": "Append",
                             "HeaderPrefix": "X-Forwarded-"
                          }
                      ]
                   },
                   "route2" : {
                      "ClusterId": "cluster1",
                      "Match": {
                          "Path": "/api/{plugin}/stuff/{**remainder}"
                      },
                      "Transforms": [
                          { "PathPattern": "/foo/{plugin}/bar/{**remainder}" },
                          {
                             "QueryValueParameter": "q",
                             "Append": "plugin"
                          }
                      ]
                   }
      },
      "Clusters": {
                   "cluster1": {
                      "Destinations": {
                          "cluster1/destination1": {
                             "Address": "https://localhost:10001/Path/Base"
                          }
                      }
                   }
      }
   }
}
All configuration entries are treated as case-insensitive, though the destination server may
treat the resulting values as case sensitive or insensitive such as the path.
The details for these transforms are covered later in this document.
Developers that want to integrate their custom transforms with the Transforms section of
configuration can do so using ITransformFactory described below.

Über Code

Transformationen können Routen programmgesteuert hinzugefügt werden, indem die Methode AddTransforms aufgerufen wird.

AddTransforms kann nach AddReverseProxy aufgerufen werden, um einen Rückruf zum Konfigurieren von Transformationen bereitzustellen. Dieser Rückruf wird jedes Mal aufgerufen, wenn eine Route erstellt oder neu erstellt wird, und ermöglicht es dem Entwickler, die RouteConfig-Informationen zu prüfen und bedingt Transformationen dafür hinzuzufügen.

Der AddTransforms-Rückruf stellt einen TransformBuilderContext bereit, über den Transformationen hinzugefügt oder konfiguriert werden können. Für die meisten Transformationen stehen TransformBuilderContext-Erweiterungsmethoden bereit, die das Hinzufügen erleichtern. Diese Erweiterungen werden weiter unten zusammen mit den einzelnen Transformationsbeschreibungen dokumentiert.

Der TransformBuilderContext enthält außerdem einen IServiceProvider für den Zugriff auf benötigte Dienste.

C#services.AddReverseProxy()
      .LoadFromConfig(_configuration.GetSection("ReverseProxy"))
      .AddTransforms(builderContext =>
      {
             // Added to all routes.
             builderContext.AddPathPrefix("/prefix");
             // Conditionally add a transform for routes that require auth.
             if (!string.IsNullOrEmpty(builderContext.Route.AuthorizationPolicy))
             {
                    builderContext.AddRequestTransform(async transformContext =>
                    {
                          transformContext.ProxyRequest.Headers.Add("CustomHeader",
"CustomValue");
                    });
             }
      });
For more advanced control see ITransformProvider described below.
 Note: The author created this article with assistance from AI. Learn more
Angepasst von Microsoft Learn , lizenziert unter CC BY 4.0 .