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
Ottenere un token di accesso per una GitHub App
Loggare le query più lente con Entity Framework
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Ordinare randomicamente una lista in C#
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Utilizzare i variable font nel CSS
Utilizzare gRPC su App Service di Azure
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Creare una custom property in GitHub
Eseguire script pre e post esecuzione di un workflow di GitHub