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.
Egy pillantással
Cél: Egyéni Dev Proxy beépülő modul létrehozása
Idő: 30 perc
Beépülő modulok: Egyéni beépülő modul
Prerequisites:Set up Dev Proxy, .NET 10 SDK
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.
HTTP-beépülő modulok és stdio beépülő modulok
A Dev Proxy kétféle beépülő modult támogat a lehallgatni kívánt forgalomtól függően:
A HTTP(S)-beépülő modulok elfogják az alkalmazás és az API-k közötti HTTP(S)-kéréseket és -válaszokat. Öröklik és felülbírálják az olyan metódusokat, mint és . HTTP-beépülő modulokat akkor használjon, ha API-hibákat szeretne szimulálni, hamis válaszokat szeretne hozzáadni, ellenőrizni szeretné a kérelem fejléceit, vagy más módon szeretné megvizsgálni és módosítani a HTTP-forgalmat.
Az Stdio beépülő modulok elfogják a standard bemeneti/kimeneti (stdin, stdout, stderr) üzeneteket a szülőfolyamat és a gyermekfolyamat között. Implementálják az interfészt (amely szintén implementálja) és felülbírálják az olyan módszereket, mint a , és . Stdio beépülő modulokat használjon az stdio-n keresztül kommunikáló eszközök, például a Model Context Protocol (MCP) kiszolgálóinak használatakor.
Egyetlen beépülő modulosztály képes kezelni a HTTP- és a stdio-forgalmat úgy, hogy felül kell bírálni mindkét halmaz metódusát.
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 v10 Core SDK
- A Dev Proxy Absztrakciók DLL legújabb verziója, amelyet a Dev proxy GitHub kiadások lapon 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 paranccsal.
dotnet new classlib -n MyCustomPluginNyissa meg az újonnan létrehozott projektet a Visual Studio Code.
code MyCustomPluginAdja hozzá a Fejlesztői proxy-absztrakciók DLL-t () a projektmappához.
Adja hozzá a elemet hivatkozásként a projekt fá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 dinamikus csatolású kódtárakat (DLL-eket) a buildkimenetből, ha hozzáad egy címkét a fájlhoz.
<ExcludeAssets>runtime</ExcludeAssets>Hozzon létre egy új osztályt, amely az osztá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, 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; } }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 fájlhoz.
Fájl: devproxyrc.json
{ "plugins": [{ "name": "CatchApiCallsPlugin", "enabled": true, "pluginPath": "./bin/Debug/net10.0/MyCustomPlugin.dll", }] }Futtassa a fejlesztői proxyt.
devproxy
A példa beépülő modul ellenőrzi a szükséges 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 osztályt. A dev proxy futásidejű elemezett beépülő modulkonfigurációt tesz elérhetővé a tulajdonsá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( HttpClient httpClient, ILogger<CatchApiCallsPlugin> logger, ISet<UrlToWatch> urlsToWatch, IProxyConfiguration proxyConfiguration, IConfigurationSection pluginConfigurationSection) : BasePlugin<CatchApiCallsConfiguration>( httpClient, logger, urlsToWatch, proxyConfiguration, pluginConfigurationSection) { 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; } // 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 fájlt, hogy az tartalmazza az új konfigurációt.
Fájl: devproxyrc.json
{ "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.2.0/rc.schema.json", "plugins": [{ "name": "CatchApiCallsPlugin", "enabled": true, "pluginPath": "./bin/Debug/net10.0/MyCustomPlugin.dll", "configSection": "catchApiCalls" }], "catchApiCalls": { "requiredHeader": "Authorization" } }Futtassa a fejlesztői proxyt.
devproxy
Lásd még
- Beépülő modul architektúrája
- Előre beállított konfigurációk használata
- Fejlesztői proxy konfigurálása