Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir bakışta
Hedef: Özel Geliştirme Ara Sunucusu eklentisi oluşturma
Süre: 30 dakika
Eklentiler: Özel eklenti
Prerequisites: Dev Proxy'yi ayarlama, .NET 10 SDK
Bu makalede, Geliştirme Proxy'si için özel eklenti oluşturmayı öğreneceksiniz. Dev Proxy için eklentiler oluşturarak işlevselliğini genişletebilir ve gereksinimlerinize uygun özel özellikler ekleyebilirsiniz.
HTTP eklentileri ile stdio eklentileri karşılaştırması
Dev Proxy, kesmek istediğiniz trafiğe bağlı olarak iki tür eklentiyi destekler:
HTTP eklentileri , uygulamanızla API'ler arasındaki HTTP(S) isteklerini ve yanıtlarını durdurur. ve gibi yöntemleri devralır ve geçersiz kılar. API hatalarını simüle etmek, sahte yanıtlar eklemek, istek üst bilgilerini doğrulamak veya HTTP trafiğini başka bir şekilde incelemek ve değiştirmek istediğinizde HTTP eklentilerini kullanın.
Stdio eklentileri , üst işlem ve alt işlem arasında standart giriş/çıkış (stdin, stdout, stderr) üzerinden gönderilen iletileri durdurur. Arayüzü uygular (bu da başka arayüzler uygular) ve , , ve gibi yöntemleri geçersiz kılarlar. Model Bağlam Protokolü (MCP) sunucuları gibi stdio üzerinden iletişim kuran araçlarla çalışırken stdio eklentilerini kullanın.
Tek bir eklenti sınıfı, her iki kümenin yöntemlerini geçersiz kılarak hem HTTP hem de stdio trafiğini işleyebilir.
Önkoşullar
Özel eklenti oluşturmaya başlamadan önce aşağıdaki önkoşullara sahip olduğunuzdan emin olun:
- .NET v10 Core SDK
- Dev Proxy GitHub yayınları sayfasında bulabileceğiniz Dev Proxy Abstractions DLL'nin en son sürümü
Yeni eklenti oluşturma
Yeni bir proje oluşturmak için sonraki adımları izleyin:
komutunu kullanarak yeni bir sınıf kitaplığı projesi oluşturun.
dotnet new classlib -n MyCustomPluginYeni oluşturulan projeyi Visual Studio Code açın.
code MyCustomPluginDev Proxy Abstractions DLL'sini () proje klasörüne ekleyin.
öğesini proje dosyanıza başvuru olarak ekleyin.
<ItemGroup> <Reference Include="DevProxy.Abstractions"> <HintPath>.\DevProxy.Abstractions.dll</HintPath> <Private>false</Private> <ExcludeAssets>runtime</ExcludeAssets> </Reference> </ItemGroup>Projeniz için gereken NuGet paketlerini ekleyin.
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.ProxyDerleme çıkışından bağımlılık dinamik bağlantı kitaplıklarını (DLL'ler) hariç tutmak için dosya başına bir
ekleyin. <ExcludeAssets>runtime</ExcludeAssets>sınıfından devralan yeni bir sınıf oluşturun.
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; } }Projenizi derleyin.
dotnet build
Özel eklentinizi kullanma
Özel eklentinizi kullanmak için Geliştirme Ara Sunucusu yapılandırma dosyasına eklemeniz gerekir:
Yeni eklenti yapılandırmasını dosyaya ekleyin.
Dosya: devproxyrc.json
{ "plugins": [{ "name": "CatchApiCallsPlugin", "enabled": true, "pluginPath": "./bin/Debug/net10.0/MyCustomPlugin.dll", }] }Geliştirme Proxy'sini çalıştırın.
devproxy
Örnek eklenti, gerekli üst bilgi için tüm eşleşen URL'leri denetler. Başlık yoksa bir uyarı mesajı gösterilir.
Eklentinize özel yapılandırma ekleme (isteğe bağlı)
Özel yapılandırma ekleyerek eklentinizin mantığını genişletebilirsiniz:
sınıfından devralın. Dev Proxy, çalışma zamanında ayrıştırılmış eklenti yapılandırmasını özelliği aracılığıyla kullanıma sunar.
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; } }Projenizi derleyin.
dotnet buildDosyanızı yeni yapılandırmayı içerecek şekilde güncelleştirin.
Dosya: 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" } }Geliştirme Proxy'sini çalıştırın.
devproxy
Ayrıca bakınız
- Eklenti mimarisi
- Önceden ayarlanmış yapılandırmaları kullanma
- Geliştirme Ara Sunucusunu Yapılandırma