Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Auf einen Blick
Ziel: Erstellen eines benutzerdefinierten Dev Proxy-Plug-Ins
Zeit: 30 Minuten
Plugins: Benutzerdefiniertes Plug-In
Voraussetzungen:Einrichten von Dev Proxy, .NET 9 SDK
In diesem Artikel erfahren Sie, wie Sie ein benutzerdefiniertes Plug-In für den Dev-Proxy erstellen. Durch das Erstellen von Plug-Ins für Dev Proxy können Sie seine Funktionalität erweitern und benutzerdefinierte Features hinzufügen, um Ihren Anforderungen gerecht zu werden.
Voraussetzungen
Bevor Sie mit dem Erstellen eines benutzerdefinierten Plug-Ins beginnen, stellen Sie sicher, dass Sie über die folgenden Voraussetzungen verfügen:
- .NET v9 Core SDK
- Die neueste Version der Dev Proxy Abstractions DLL, die Sie auf der Dev Proxy GitHub-Versionsseite finden.
Erstellen eines neuen Plug-Ins
Führen Sie die nächsten Schritte aus, um ein neues Projekt zu erstellen:
Erstellen Sie mithilfe des
dotnet new classlibBefehls ein neues Klassenbibliotheksprojekt.dotnet new classlib -n MyCustomPluginÖffnen Sie das neu erstellte Projekt in Visual Studio Code.
code MyCustomPluginFügen Sie die Dev Proxy Abstractions DLL (
DevProxy.Abstractions.dll) zum Projektordner hinzu.Fügen Sie
DevProxy.Abstractions.dllals Verweis in Ihre ProjektdateiDevProxyCustomPlugin.csprojhinzu.<ItemGroup> <Reference Include="DevProxy.Abstractions"> <HintPath>.\DevProxy.Abstractions.dll</HintPath> <Private>false</Private> <ExcludeAssets>runtime</ExcludeAssets> </Reference> </ItemGroup>Fügen Sie die für Ihr Projekt erforderlichen NuGet-Pakete hinzu.
dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.Binder dotnet add package Microsoft.Extensions.Logging.Abstractions dotnet add package Unobtanium.Web.ProxySchließen Sie die Abhängigkeits-DLLs aus der Build-Ausgabe aus, indem Sie pro
ExcludeAssetsin der DateiPackageReferenceeinenDevProxyCustomPlugin.csproj-Tag hinzufügen.<ExcludeAssets>runtime</ExcludeAssets>Erstellen Sie eine neue Klasse, die von der
BaseProxyKlasse erbt.using DevProxy.Abstractions.Plugins; using DevProxy.Abstractions.Proxy; using Microsoft.Extensions.Logging; namespace MyCustomPlugin; public sealed class CatchApiCallsPlugin( ILogger<CatchApiCallsPlugin> logger, ISet<UrlToWatch> urlsToWatch) : BasePlugin(logger, urlsToWatch) { public override string Name => nameof(CatchApiCallsPlugin); public override Task BeforeRequestAsync(ProxyRequestArgs e, CancellationToken cancellationToken) { Logger.LogTrace("{Method} called", nameof(BeforeRequestAsync)); ArgumentNullException.ThrowIfNull(e); if (!e.HasRequestUrlMatch(UrlsToWatch)) { Logger.LogRequest("URL not matched", MessageType.Skipped, new(e.Session)); return Task.CompletedTask; } var headers = e.Session.HttpClient.Request.Headers; var header = headers.Where(h => h.Name == "Authorization").FirstOrDefault(); if (header is null) { Logger.LogRequest($"Does not contain the Authorization header", MessageType.Warning, new LoggingContext(e.Session)); return Task.CompletedTask; } Logger.LogTrace("Left {Name}", nameof(BeforeRequestAsync)); return Task.CompletedTask; } }Erstellen Sie das Projekt.
dotnet build
Verwenden Ihres benutzerdefinierten Plug-Ins
Um Ihr benutzerdefiniertes Plug-In zu verwenden, müssen Sie es der Dev Proxy-Konfigurationsdatei hinzufügen:
Fügen Sie die neue Plug-In-Konfiguration in der
devproxyrc.jsonDatei hinzu.Datei: devproxyrc.json
{ "plugins": [{ "name": "CatchApiCallsPlugin", "enabled": true, "pluginPath": "./bin/Debug/net9.0/MyCustomPlugin.dll", }] }Führen Sie den Dev-Proxy aus.
devproxy
Das Beispiel-Plug-In überprüft alle übereinstimmenden URLs auf den erforderlichen Authorization Header. Wenn die Kopfzeile nicht vorhanden ist, wird eine Warnmeldung angezeigt.
Hinzufügen einer benutzerdefinierten Konfiguration zu Ihrem Plug-In (optional)
Sie können die Logik Ihres Plug-Ins erweitern, indem Sie eine benutzerdefinierte Konfiguration hinzufügen:
Erbe von der
BasePlugin<TConfiguration>Klasse. Dev Proxy stellt zur Laufzeit die analysierte Plug-in-Konfiguration über dieConfiguration-Eigenschaft bereit.using DevProxy.Abstractions.Plugins; using DevProxy.Abstractions.Proxy; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; namespace MyCustomPlugin; public sealed class CatchApiCallsConfiguration { public string? RequiredHeader { get; set; } } public sealed class CatchApiCallsPlugin( ILogger<CatchApiCallsPlugin> logger, ISet<UrlToWatch> urlsToWatch, IProxyConfiguration proxyConfiguration, IConfigurationSection pluginConfigurationSection) : BasePlugin<CatchApiCallsConfiguration>( logger, urlsToWatch, proxyConfiguration, pluginConfigurationSection) { public override string Name => nameof(CatchApiCallsPlugin); public override Task BeforeRequestAsync(ProxyRequestArgs e) { Logger.LogTrace("{Method} called", nameof(BeforeRequestAsync)); ArgumentNullException.ThrowIfNull(e); if (!e.HasRequestUrlMatch(UrlsToWatch)) { Logger.LogRequest("URL not matched", MessageType.Skipped, new(e.Session)); return Task.CompletedTask; } // Start using your custom configuration var requiredHeader = Configuration.RequiredHeader ?? string.Empty; if (string.IsNullOrEmpty(requiredHeader)) { // Required header is not set, so we don't need to do anything Logger.LogRequest("Required header not set", MessageType.Skipped, new LoggingContext(e.Session)); return Task.CompletedTask; } var headers = e.Session.HttpClient.Request.Headers; var header = headers.Where(h => h.Name == requiredHeader).FirstOrDefault(); if (header is null) { Logger.LogRequest($"Does not contain the {requiredHeader} header", MessageType.Warning, new LoggingContext(e.Session)); return Task.CompletedTask; } Logger.LogTrace("Left {Name}", nameof(BeforeRequestAsync)); return Task.CompletedTask; } }Erstellen Sie das Projekt.
dotnet buildAktualisieren Sie Ihre
devproxyrc.jsonDatei so, dass sie die neue Konfiguration enthält.Datei: devproxyrc.json
{ "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.1.0/rc.schema.json", "plugins": [{ "name": "CatchApiCallsPlugin", "enabled": true, "pluginPath": "./bin/Debug/net9.0/MyCustomPlugin.dll", "configSection": "catchApiCalls" }], "catchApiCalls": { "requiredHeader": "Authorization" } }Führen Sie den Dev-Proxy aus.
devproxy