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
Creare una libreria CSS universale: i bottoni
Utilizzare Tailwind CSS all'interno di React: primi componenti
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Eseguire operazioni sui blob con Azure Storage Actions
Usare lo spread operator con i collection initializer in C#
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Utilizzare database e servizi con gli add-on di Container App
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Le novità di Angular: i miglioramenti alla CLI
Creare una libreria CSS universale: Cards
Disabilitare automaticamente un workflow di GitHub
Eseguire script pre e post esecuzione di un workflow di GitHub
I più letti di oggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub