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
Cache policy su route groups di Minimal API in ASP.NET Core 7
Disabilitare automaticamente un workflow di GitHub
Short-circuiting della Pipeline in ASP.NET Core
Utilizzare Model as a Service su Microsoft Azure
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Workflow di continuous deployment tramite pull request label in GitHub
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Configurare policy CORS in Azure Container Apps
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management