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
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Gestire il colore CSS con HWB
.NET Conference Italia 2024
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Creare una custom property in GitHub
Gestione degli stili CSS con le regole @layer
Eseguire i worklow di GitHub su runner potenziati
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Escludere alcuni file da GitHub Secret Scanning