Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ebből a cikkből megtudhatja, hogyan hozhat létre egyéni beépülő modult a fejlesztői proxyhoz. A Dev Proxy beépülő moduljainak létrehozásával kibővítheti annak funkcióit, és egyéni funkciókat adhat hozzá az igényeinek megfelelően.
Előfeltételek
Mielőtt elkezdené létrehozni az egyéni beépülő modult, győződjön meg arról, hogy rendelkezik az alábbi előfeltételekkel:
- .NET v9 Core SDK
- A Dev Proxy Absztrakciók DLL legújabb verziója, amelyet a Dev Proxy GitHub kiadási oldalán talál
Új beépülő modul létrehozása
Új projekt létrehozásához kövesse a következő lépéseket:
Hozzon létre egy új osztálytárprojektet a
dotnet new classlibparanccsal.dotnet new classlib -n MyCustomPluginNyissa meg az újonnan létrehozott projektet a Visual Studio Code-ban.
code MyCustomPluginAdja hozzá a Fejlesztői proxy-absztrakciók DLL-t (
DevProxy.Abstractions.dll) a projektmappához.Adja hozzá a
DevProxy.Abstractions.dllelemet hivatkozásként a projektDevProxyCustomPlugin.csprojfájlhoz.<ItemGroup> <Reference Include="DevProxy.Abstractions"> <HintPath>.\DevProxy.Abstractions.dll</HintPath> <Private>false</Private> <ExcludeAssets>runtime</ExcludeAssets> </Reference> </ItemGroup>Adja hozzá a projekthez szükséges NuGet-csomagokat.
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.ProxyZárja ki a függőségi DLL-eket a build kimenetéből, ha hozzáad egy címkét
ExcludeAssetsPackageReferenceaDevProxyCustomPlugin.csprojfájlhoz.<ExcludeAssets>runtime</ExcludeAssets>Hozzon létre egy új osztályt, amely az
BaseProxyosztálytól örököl.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) { 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; } }Hozza létre a projektet.
dotnet build
Egyéni beépülő modul használata
Az egyéni beépülő modul használatához hozzá kell adnia azt a Dev Proxy konfigurációs fájljához:
Adja hozzá az új beépülő modulkonfigurációt a
devproxyrc.jsonfájlhoz.{ "plugins": [{ "name": "CatchApiCallsPlugin", "enabled": true, "pluginPath": "./bin/Debug/net9.0/MyCustomPlugin.dll", }] }Futtassa a fejlesztői proxyt.
devproxy
A példa beépülő modul ellenőrzi a szükséges Authorization fejléc összes egyező URL-címét. Ha a fejléc nem található, figyelmeztető üzenet jelenik meg.
Egyéni konfiguráció hozzáadása a beépülő modulhoz (nem kötelező)
A beépülő modul logikáját egyéni konfiguráció hozzáadásával bővítheti:
Örökölje az
BasePlugin<TConfiguration>osztályt. A dev proxy futásidejű elemezett beépülő modulkonfigurációt tesz elérhetővé aConfigurationtulajdonságon keresztül.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; } }Hozza létre a projektet.
dotnet buildFrissítse a
devproxyrc.jsonfájlt, hogy az tartalmazza az új konfigurációt.{ "plugins": [{ "name": "CatchApiCallsPlugin", "enabled": true, "pluginPath": "./bin/Debug/net9.0/MyCustomPlugin.dll", "configSection": "catchApiCalls" }], "catchApiCalls": { "requiredHeader": "Authorization" // Example configuration } }Futtassa a fejlesztői proxyt.
devproxy