Condividi tramite


Usare Dev Proxy con applicazioni .NET Aspire

.NET Aspire è uno stack opinionato, pronto per il cloud per la creazione di applicazioni osservabili, pronte per la produzione e distribuite. Si basa su .NET e offre una piattaforma moderna, veloce e scalabile per la creazione di applicazioni Web.

Per usare Dev Proxy con l'applicazione .NET Aspire, usare il pacchetto NuGet DevProxy.Hosting. Il pacchetto fornisce estensioni Dev Proxy .NET Aspire per integrare facilmente Dev Proxy nell'applicazione .NET Aspire.

Installare il pacchetto NuGet Dev Proxy .NET Aspire Extensions

Per installare il pacchetto NuGet dev Proxy .NET Aspire extensions, eseguire il comando seguente nella cartella radice dell'applicazione .NET Aspire:

dotnet add package DevProxy.Hosting

Usando il pacchetto di estensioni Dev Proxy .NET Aspire, è possibile integrare Dev Proxy dal file eseguibile installato localmente o da un contenitore Docker.

Integra Dev Proxy dall'eseguibile installato localmente

Se è installato Dev Proxy in locale, il modo più pratico per integrarlo nell'applicazione .NET Aspire consiste nel fare riferimento all'eseguibile locale. Il frammento di codice seguente illustra come integrare Dev Proxy dall'eseguibile installato localmente con l'applicazione starter .NET Aspire.

Importante

Quando si configura Dev Proxy per l'uso del file eseguibile locale, assicurarsi che il file eseguibile sia disponibile in tutti i computer in cui si esegue l'applicazione. Se si vuole usare Dev Proxy in un ambiente containerizzato, prendere in considerazione l'uso del contenitore 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();

Prima di tutto, usando le estensioni Dev Proxy .NET Aspire, si aggiunge un servizio Dev Proxy all'applicazione. Il AddDevProxyExecutable metodo specifica il nome dell'eseguibile del proxy Dev. Usando il WithConfigFile metodo , si specifica il percorso del file di configurazione del proxy di sviluppo. Usando il WithUrlsToWatch metodo , si specifica l'elenco di URL da controllare. In questo esempio si vuole che Dev Proxy intercetta le richieste inviate dall'app Web al servizio API.

Importante

Si noti che il WithUrlsToWatch metodo accetta una funzione che restituisce un elenco di URL da controllare. Ciò è dovuto al fatto che l'endpoint del servizio API non è disponibile quando si configura Dev Proxy, quindi non è possibile passare direttamente l'URL. Al contrario, si usa un'espressione lambda che restituisce l'URL del servizio API quando è disponibile.

Successivamente, nell'app Web si usa la HTTPS_PROXY variabile di ambiente per configurare l'app Web per l'uso di Dev Proxy. Usando il WaitFor metodo si indica all'app Web di attendere che Dev Proxy sia disponibile prima dell'avvio.

Integrare Dev Proxy da un contenitore Docker

In alternativa, è possibile integrare Dev Proxy nell'applicazione .NET Aspire da un contenitore Docker. L'uso dell'immagine Docker di Dev Proxy è utile, perché .NET Aspira automaticamente estrae l'immagine se non è disponibile in locale. Lo svantaggio è che ci sono altri passaggi per configurare Dev Proxy nell'applicazione.

Il frammento di codice seguente illustra come integrare Dev Proxy da un contenitore Docker con l'applicazione starter .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();

I passaggi di base sono uguali a quando si usa l'eseguibile installato localmente. La differenza principale è il modo in cui si specifica il file di configurazione e il certificato per l'intercettazione del traffico HTTPS.

Quando si integra Dev Proxy da un contenitore Docker, è necessario montare le cartelle locali con il file di configurazione e il certificato nel contenitore. In questo esempio, nella soluzione .NET Aspire, si dispone della struttura di cartelle seguente:

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

La cert cartella contiene il certificato PFX (Personal Information Exchange) usato da Dev Proxy per intercettare il traffico HTTPS.

Importante

È necessario considerare attendibile il certificato nella cartella nel cert computer oppure le richieste al servizio API avranno esito negativo. Inoltre, affinché Dev Proxy carichi il certificato, deve essere nel formato PFX, deve essere denominato rootCert.pfxe non deve essere protetto con una password.

La config cartella contiene il file di configurazione del proxy di sviluppo e altri file proxy di sviluppo, ad esempio simulazioni o errori.

Poiché si stanno montando i file di certificato e di configurazione in volumi separati nel contenitore, devono essere archiviati in cartelle separate.

Usare Dev Proxy con l'applicazione starter .NET Aspire

Dopo aver avviato l'applicazione, Dev Proxy viene visualizzato come risorsa nell'applicazione.

Screenshot del dashboard .NET Aspire che mostra le risorse dell'applicazione, incluso Dev Proxy.

Quando si usa l'applicazione Web in modo che effettui richieste al servizio API, Dev Proxy intercetta le richieste e gestisce in base alla configurazione. È possibile visualizzare l'output di Dev Proxy nella sezione Console del dashboard .NET Aspire.

Screenshot del dashboard .NET Aspire che mostra l'output della console di Dev Proxy.