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
Gestire progetti .NET + React in .NET Aspire
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Utilizzare noopener e noreferrer nei link HTML
Analizzare il contenuto di una issue con GitHub Models e AI
Introduzione a GitHub Copilot CLI
DevSecOps per .NET: dalla teoria alla pratica
Utilizzare il top layer in HTML
Integrare SQL Server in un progetto .NET Aspire
Rendere affidabile lo scale out su Azure App Service
Integrare LLM alle nostre applicazioni in .NET con MCP
Ciclo di vita risorse con .NET Aspire
Effettuare un clone parziale di un repository di GitHub




