Поделиться через


Использование прокси-сервера разработки с приложениями .NET Aspire

.NET Aspire — это облачный стек с четкой архитектурой для создания наблюдаемых, готовых к эксплуатации распределенных приложений. Он построен на основе .NET и предоставляет современную, быструю и масштабируемую платформу для создания веб-приложений.

Чтобы использовать прокси-сервер разработки с приложением .NET Aspire, используйте пакет NuGet DevProxy.Hosting. Пакет предоставляет расширения Dev Proxy .NET Aspire для удобной интеграции Dev Proxy в ваше приложение .NET Aspire.

Установите пакет NuGet с расширениями Dev Proxy .NET Aspire

Чтобы установить пакет Dev Proxy .NET Aspire extensions из NuGet, выполните следующую команду в корневой папке вашего приложения .NET Aspire:

dotnet add package DevProxy.Hosting

Используя пакет расширений .NET Aspire для Dev Proxy, можно интегрировать Dev Proxy с помощью локально установленного исполняемого файла или контейнера Docker.

Интегрировать Dev-прокси с локально установленного исполняемого файла

Если вы установили прокси-сервер разработки локально, самый удобный способ интегрировать его в приложение .NET Aspire — ссылаться на локальный исполняемый файл. В следующем фрагменте кода показано, как интегрировать Dev Proxy из локально установленного исполняемого файла с начальным приложением .NET Aspire.

Это важно

При настройке прокси-сервера разработки для использования локального исполняемого файла убедитесь, что исполняемый файл доступен на всех компьютерах, на которых выполняется приложение. Если вы хотите использовать прокси разработки в контейнерной среде, попробуйте использовать контейнер Docker.

using DevProxy.Hosting;

var builder = DistributedApplication
    .CreateBuilder(args);

// Add an API service to the application
var apiService = builder.AddProject<Projects.AspireStarterApp_ApiService>("apiservice")
    .WithHttpsHealthCheck("/health");

var devProxy = builder.AddDevProxyExecutable("devproxy")
    .WithConfigFile(".devproxy/config/devproxy.json")
    .WithUrlsToWatch(() => [$"{apiService.GetEndpoint("https").Url}/*"]);

// Add a web frontend project and configure it to use Dev Proxy
builder.AddProject<Projects.AspireStarterApp_Web>("webfrontend")
    .WithExternalHttpEndpoints()
    .WithHttpsHealthCheck("/health")
    .WithEnvironment("HTTPS_PROXY", devProxy.GetEndpoint(DevProxyResource.ProxyEndpointName))
    .WithReference(apiService)
    .WaitFor(apiService)
    .WaitFor(devProxy);

// Build and run the application
builder.Build().Run();

Во-первых, используя расширения Dev Proxy .NET Aspire, вы добавляете в приложение службу Dev Proxy. Метод AddDevProxyExecutable задает имя исполняемого файла прокси-сервера Dev. WithConfigFile С помощью метода укажите путь к файлу конфигурации прокси-сервера разработки. WithUrlsToWatch С помощью метода можно указать список URL-адресов для просмотра. В этом примере требуется, чтобы прокси-сервер разработки перехватывал запросы, которые веб-приложение выполняет в службу API.

Это важно

Обратите внимание, что WithUrlsToWatch метод принимает функцию, которая возвращает список URL-адресов для просмотра. Это связано с тем, что конечная точка службы API недоступна при настройке прокси-сервера разработки, поэтому вы не можете передать URL-адрес напрямую. Вместо этого используется лямбда-выражение, которое возвращает URL-адрес службы API, когда он доступен.

В веб-приложении вы используете переменную среды HTTPS_PROXY для настройки веб-приложения на использование Dev Proxy. Используя метод WaitFor, вы инструктируете веб-приложение ожидать, когда прокси-сервер разработки станет доступным, перед началом работы.

Интеграция прокси-сервера разработки из контейнера Docker

Кроме того, вы можете интегрировать Прокси разработки в приложение .NET Aspire из контейнера Docker. Использование образа Docker для прокси-сервера разработки удобно, так как .NET Aspire автоматически извлекает образ, если он недоступен локально. Недостатком является то, что в приложении есть несколько дополнительных шагов по настройке прокси-сервера разработки.

В следующем фрагменте кода показано, как интегрировать Dev Proxy из контейнера Docker с начальным приложением .NET Aspire.

using DevProxy.Hosting;

var builder = DistributedApplication
    .CreateBuilder(args);

// Add an API service to the application
var apiService = builder.AddProject<Projects.AspireStarterApp_ApiService>("apiservice")
    .WithHttpsHealthCheck("/health");

// Add Dev Proxy as a container resource
var devProxy = builder.AddDevProxyContainer("devproxy")
    // specify the Dev Proxy configuration file; relative to the config folder
    .WithConfigFile("./devproxy.json")
    // mount the local folder with PFX certificate for intercepting HTTPS traffic
    .WithCertFolder(".devproxy/cert")
    // mount the local folder with Dev Proxy configuration
    .WithConfigFolder(".devproxy/config")
    // let Dev Proxy intercept requests to the API service
    .WithUrlsToWatch(() => [$"{apiService.GetEndpoint("https").Url}/*"]);

// Add a web frontend project and configure it to use Dev Proxy
builder.AddProject<Projects.AspireStarterApp_Web>("webfrontend")
    .WithExternalHttpEndpoints()
    .WithHttpsHealthCheck("/health")
    // set the HTTPS_PROXY environment variable to the Dev Proxy endpoint
    .WithEnvironment("HTTPS_PROXY", devProxy.GetEndpoint(DevProxyResource.ProxyEndpointName))
    .WithReference(apiService)
    .WaitFor(apiService)
    .WaitFor(devProxy);

// Build and run the application
builder.Build().Run();

Основные шаги аналогичны использованию локально установленного исполняемого файла. Основное различие заключается в том, как указать файл конфигурации и сертификат для перехвата трафика HTTPS.

При интеграции прокси-сервера Dev из контейнера Docker необходимо подключить локальные папки с файлом конфигурации и сертификатом в контейнер. В этом примере в решении .NET Aspire у вас есть следующая структура папок:

AspireStarterApp
├── .devproxy
│   ├── cert
│   │   └── rootCert.pfx
│   └── config
│       └── devproxy.json
├── Projects
│   ├── AspireStarterApp_ApiService
│   └── AspireStarterApp_Web
└── AspireStarterApp.sln

Папка cert содержит сертификат PFX, который прокси-сервер разработки использует для перехвата трафика HTTPS.

Это важно

Необходимо доверять сертификату в папке cert на компьютере, или запросы к службе API завершаются ошибкой. Кроме того, чтобы прокси-сервер разработки загружал сертификат, он должен быть в формате PFX, должен быть назван rootCert.pfxи не должен быть защищен паролем.

Папка config содержит файл конфигурации прокси-сервера разработки и другие файлы прокси-сервера разработки, такие как макеты или ошибки.

Так как вы монтируете сертификаты и файлы конфигурации к отдельным томам в контейнере, они должны храниться в отдельных папках.

Использование прокси-сервера разработки с начальным приложением .NET Aspire

После запуска приложения прокси-сервер разработки отображается как ресурс в приложении.

Снимок экрана: панель мониторинга .NET Aspire с ресурсами приложения, включая прокси-сервер разработки.

При использовании веб-приложения таким образом, чтобы он запрашивал службу API, прокси-сервер разработки перехватывает запросы и обрабатывает их в соответствии с конфигурацией. Выходные данные прокси-сервера разработки можно просмотреть в разделе консоли панели мониторинга .NET Aspire.

Снимок экрана: панель мониторинга .NET Aspire с выходными данными консоли прокси-сервера разработки.