Uso del proxy de desarrollo con aplicaciones Aspire

De un vistazo
Objetivo: Uso del Proxy de desarrollo con Aspire
Tiempo: 15 minutos
Complementos: Varios
Requisitos previos:Configuración del proxy de desarrollo, Aspire

Aspire es una pila bien fundamentada y lista para la nube para compilar aplicaciones observables, listas para producción y distribuidas. Se basa en .NET y proporciona una plataforma moderna, rápida y escalable para compilar aplicaciones web.

Para usar dev Proxy con la aplicación Aspire, use el paquete NuGet DevProxy.Hosting. El paquete proporciona extensiones Dev Proxy Aspire para integrar convenientemente Dev Proxy en la aplicación Aspire.

Instalación del paquete NuGet de extensiones Dev Proxy Aspire

Para instalar el paquete NuGet extensiones Dev Proxy Aspire, ejecute el siguiente comando en la carpeta raíz de la aplicación Aspire:

dotnet add package DevProxy.Hosting

Con el paquete de extensiones Dev Proxy Aspire, puede integrar dev Proxy desde el ejecutable instalado localmente o desde un contenedor de Docker.

Integración del proxy de desarrollo desde el ejecutable instalado localmente

Si tiene dev Proxy instalado localmente, la manera más conveniente de integrarlo en la aplicación Aspire es hacer referencia al ejecutable local. El siguiente fragmento de código muestra cómo integrar Dev Proxy desde el archivo ejecutable instalado localmente con la aplicación de inicio Aspire.

Importante

Al configurar el proxy de desarrollo para usar el ejecutable local, asegúrese de que el ejecutable está disponible en todas las máquinas en las que se ejecuta la aplicación. Si quiere usar el proxy de desarrollo en un entorno contenedorizado, considere la posibilidad de usar el contenedor de Docker en su lugar.

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();

En primer lugar, con las extensiones Dev Proxy Aspire, agrega un servicio proxy de desarrollo a la aplicación. El AddDevProxyExecutable método especifica el nombre del ejecutable del proxy de desarrollo. Mediante el método WithConfigFile, especifique la ruta de acceso al archivo de configuración del proxy de desarrollo. Usando el método WithUrlsToWatch, especifique la lista de direcciones URL que desea supervisar. En este ejemplo, quiere que el proxy de desarrollo intercepte las solicitudes que realiza la aplicación web en el servicio de API.

Importante

Observe que el WithUrlsToWatch método acepta una función que devuelve una lista de direcciones URL que se van a inspeccionar. Esto se debe a que el punto de conexión del servicio de API no está disponible al configurar el proxy de desarrollo, por lo que no puede pasar la dirección URL directamente. En su lugar, se usa una expresión lambda que devuelve la dirección URL del servicio de API cuando está disponible.

A continuación, en la aplicación web, usará la variable de entorno HTTPS_PROXY para configurar la aplicación web para usar el proxy de desarrollo. Usando el método WaitFor, se indica a la aplicación web que espere a que el proxy de desarrollo esté disponible antes de comenzar.

Integración del proxy de desarrollo desde un contenedor de Docker

Como alternativa, puede integrar Dev Proxy en la aplicación Aspire desde un contenedor de Docker. El uso de la imagen de Docker del proxy de desarrollo es cómodo, ya que Aspire descarga automáticamente la imagen si no se encuentra disponible localmente. El inconveniente es que hay algunos pasos más para configurar el proxy de desarrollo en la aplicación.

En el fragmento de código siguiente se muestra cómo integrar Dev Proxy desde un contenedor de Docker con la aplicación aspire starter.

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();

Los pasos básicos son los mismos que cuando se usa el ejecutable instalado localmente. La principal diferencia es cómo se especifica el archivo de configuración y el certificado para interceptar el tráfico HTTPS.

Al integrar Dev Proxy desde un contenedor de Docker, debe montar las carpetas locales con el archivo de configuración y el certificado en el contenedor. En este ejemplo, en la solución Aspire, tiene la siguiente estructura de carpetas:

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

La cert carpeta contiene el certificado de Intercambio de información personal (PFX) que usa el proxy de desarrollo para interceptar el tráfico HTTPS.

Importante

Debe confiar en el certificado de la carpeta de la cert máquina o se producirá un error en las solicitudes al servicio de API. Además, para que el proxy de desarrollo cargue el certificado, debe estar en el formato PFX, debe tener el nombre rootCert.pfxy no debe protegerse con una contraseña.

La carpeta config contiene el archivo de configuración del Dev Proxy y otros archivos del Dev Proxy, como simulaciones y errores.

Dado que va a montar los archivos de certificado y configuración para separar volúmenes en el contenedor, deben almacenarse en carpetas independientes.

Uso de Dev Proxy con la aplicación inicial Aspire

Después de iniciar la aplicación, el proxy de desarrollo se muestra como un recurso en la aplicación.

Captura de pantalla del panel Aspire en la que se muestran los recursos de la aplicación, incluido el proxy de desarrollo.

Cuando usas la aplicación web para realizar solicitudes al servicio de API, Dev Proxy intercepta las solicitudes y las gestiona de acuerdo con tu configuración. Puedes ver la salida del proxy de desarrollo en la sección Consola del panel Aspire.

Captura de pantalla del panel de control de Aspire que muestra la salida de la consola del Proxy de Desarrollo.

Consulte también