Come sappiamo, per configurare CORS su un'applicazione ASP.NET Core basta impostare i parametri che desideriamo nel metodo UseCors, all'interno della classe di Startup:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // .. altro codice qui .. var allowedOrigins = new[] { "https://mywebsite.com", "https://admin.mywebsite.com", "https://localhost:44353" }; builder.UseCors(policy => { policy .WithOrigins(allowedOrigins) .AllowAnyMethod() .AllowAnyHeader() .WithExposedHeaders("Operation-Location"); }); // ... altro codice qui ... }
Ma come possiamo scrivere degli unit test che verifichino, magari in maniera automatizzata nelle nostre build pipeline, che le impostazioni siano quelle che vogliamo?
Il modo più efficace è sicuramente quello di sfruttare WebApplicationFactory, in un test simile al seguente:
[Fact] [InlineData("https://mywebsite.com")] [InlineData("https://admin.mywebsite.com")] [InlineData("https://localhost:44353")] public async Task UseCors_Configures_CorrectDomains(string url) { // Startup è la medesima classe di Startup dell'applicazione ASP.NET Core var factory = new WebApplicationFactory<Startup>(); // creiamo un "finto" HttpClient per effettuare la richiesta var client = factory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Options, "/"); request.Headers.Add("Access-Control-Request-Headers", "authorization,content-type"); request.Headers.Add("Access-Control-Request-Method", "GET"); request.Headers.Add("Origin", url); var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); response.Headers.TryGetValues("Access-Control-Allow-Origin", out var allowedOrigins); Assert.Contains(url, allowedOrigins); }
Tramite WebApplicationFactory, infatti, il test in alto avvia in locale il runtime di ASP.NET Core e genera un HttpClient fittizio tramite cui effettuarvi delle richieste.
A questo punto, non dobbiamo far altro che simulare la chiamata del browser, generando una richiesta di prefile in OPTIONS, e specificando gli header per il dominio di origine e il verbo HTTP.
Una volta effettuata questa invocazione, non dobbiamo far altro che verificare che la risposta del server contenga l'header Access-Control-Allow-Origin con lo stesso valore che abbiamo specificato come origin.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Ordine e importanza per @layer in CSS
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Introduzione alle Container Queries
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Collegare applicazioni server e client con .NET Aspire
Usare il colore CSS per migliorare lo stile della pagina
Filtering sulle colonne in una QuickGrid di Blazor
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Rendere le variabili read-only in una pipeline di Azure DevOps
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Creare una libreria CSS universale: Cards
I più letti di oggi
- Beta 1 di VS 2005 Enterprise Architect
- Point-in-time restore con gli Azure Storage Blob
- Focus dei tag input con HTML5
- Il nuovo tag nav in HTML5
- Evitare la modalità di risparmio energetico in una Windows Store app
- Real Code Day 4.0: costruire applicazioni reali - Firenze
- AI&ML Conference 2019 - Milano
- Mono 0.12: verso una nuova implementazione di ASP.NET