Vytvoření vlastního modulu plug-in
V tomto článku se dozvíte, jak vytvořit vlastní modul plug-in pro vývojový proxy server. Vytvořením modulů plug-in pro Dev Proxy můžete rozšířit jeho funkce a přidat vlastní funkce tak, aby vyhovovaly vašim potřebám.
Požadavky
Než začnete vytvářet vlastní modul plug-in, ujistěte se, že máte následující požadavky:
- Sada .NET Core SDK
- Nejnovější verze knihovny DLL pro abstrakce dev proxy serveru, kterou najdete na stránce verzí GitHubu pro vývoj proxy
Vytvoření nového modulu plug-in
Pokud chcete vytvořit nový projekt, postupujte podle dalších kroků:
Pomocí příkazu vytvořte nový projekt
dotnet new classlib
knihovny tříd.dotnet new classlib -n MyCustomPlugin
Otevřete nově vytvořený projekt v editoru Visual Studio Code.
code MyCustomPlugin
Přidejte knihovnu DLL pro abstrakce dev proxy (
dev-proxy-abstractions.dll
) do složky projektu.Přidejte ho
dev-proxy-abstractions.dll
jako odkaz na soubor projektuDevProxyCustomPlugin.csproj
.<ItemGroup> <Reference Include="dev-proxy-abstractions"> <HintPath>.\dev-proxy-abstractions.dll</HintPath> <Private>false</Private> <ExcludeAssets>runtime</ExcludeAssets> </Reference> </ItemGroup>
Přidejte balíčky NuGet vyžadované pro váš projekt.
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.Proxy
Vylučte knihovny DLL závislostí z výstupu sestavení přidáním
ExcludeAssets
značky pro každýPackageReference
vDevProxyCustomPlugin.csproj
souboru.<ExcludeAssets>runtime</ExcludeAssets>
Vytvořte novou třídu, která implementuje
BaseProxyPlugin
rozhraní.using Microsoft.DevProxy.Abstractions; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; namespace MyCustomPlugin; public class CatchApiCalls(IPluginEvents pluginEvents, IProxyContext context, ILogger logger, ISet<UrlToWatch> UrlsToWatch, IConfigurationSection? configSection = null) : BaseProxyPlugin(pluginEvents, context, logger, UrlsToWatch, configSection) { public override string Name => nameof(CatchApiCalls); public override async Task RegisterAsync() { await base.RegisterAsync(); PluginEvents.BeforeRequest += BeforeRequestAsync; } private Task BeforeRequestAsync(object sender, ProxyRequestArgs e) { if (UrlsToWatch is null || !e.HasRequestUrlMatch(UrlsToWatch)) { // No match for the URL, so we don't need to do anything Logger.LogRequest("URL not matched", MessageType.Skipped, new LoggingContext(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; } return Task.CompletedTask; } }
Sestavte svůj projekt.
dotnet build
Použití vlastního modulu plug-in
Pokud chcete použít vlastní modul plug-in, musíte ho přidat do konfiguračního souboru dev proxy serveru:
Do souboru přidejte novou konfiguraci
devproxyrc.json
modulu plug-in.{ "plugins": [{ "name": "CatchApiCalls", "enabled": true, "pluginPath": "./bin/Debug/net8.0/MyCustomPlugin.dll", }] }
Spusťte dev proxy server.
devproxy
Ukázkový modul plug-in zkontroluje všechny odpovídající adresy URL požadované autorizační hlavičky. Pokud záhlaví není k dispozici, zobrazí se zpráva s upozorněním.
Přidání vlastní konfigurace do modulu plug-in (volitelné)
Logiku modulu plug-in můžete rozšířit přidáním vlastní konfigurace:
Přidejte nový
_configuration
objekt a vytvořte vazbu vRegister
metodě.using Microsoft.DevProxy.Abstractions; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; namespace MyCustomPlugin; public class CatchApiCallsConfiguration { public string? RequiredHeader { get; set; } } public class CatchApiCalls(IPluginEvents pluginEvents, IProxyContext context, ILogger logger, ISet<UrlToWatch> UrlsToWatch, IConfigurationSection? configSection = null) : BaseProxyPlugin(pluginEvents, context, logger, UrlsToWatch, configSection) { public override string Name => nameof(CatchApiCalls); // Define you custom configuration private readonly CatchApiCallsConfiguration _configuration = new(); public override async Task RegisterAsync() { await base.RegisterAsync(); // Bind your plugin configuration configSection?.Bind(_configuration); // Register your event handlers PluginEvents.BeforeRequest += BeforeRequestAsync; } private Task BeforeRequestAsync(object sender, ProxyRequestArgs e) { if (UrlsToWatch is null || !e.HasRequestUrlMatch(UrlsToWatch)) { // No match for the URL, so we don't need to do anything Logger.LogRequest("URL not matched", MessageType.Skipped, new LoggingContext(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; } return Task.CompletedTask; } }
Sestavte svůj projekt.
dotnet build
Aktualizujte
devproxyrc.json
soubor tak, aby zahrnoval novou konfiguraci.{ "plugins": [{ "name": "CatchApiCalls", "enabled": true, "pluginPath": "./bin/Debug/net8.0/MyCustomPlugin.dll", "configSection": "catchApiCalls" }], "catchApiCalls": { "requiredHeader": "Authorization" // Example configuration } }
Spusťte dev proxy server.
devproxy