ASP.NET MVC possiede un filtro, stiamo parlando di RequireHttps, che ci permette di indicare quali controller o action richiedano una connessione SSL. L'effetto è che, in presenza di una connessione non protetta, la richiesta viene automaticamente ridirezionata sul protocollo HTTPS.
Tipicamente, però, ci sono intere aree di un sito che vanno protette tramite SSL: pensiamo, per esempio, all'intera gestione del carrello, dei pagamenti, o dell'account utente.
Con una semplice modifica, possiamo creare un filtro ereditato da RequireHttps, che però applichi la logica a una specifica area:
public class HttpsAreaFilter : RequireHttpsAttribute { public string AreaName { get; set; } public HttpsAreaFilter(string areaName) { this.AreaName = areaName; } protected override void HandleNonHttpsRequest( AuthorizationContext filterContext) { var requestArea = filterContext.RouteData .DataTokens["area"] as string ?? string.Empty; if (string.Equals(requestArea, this.AreaName, StringComparison.InvariantCultureIgnoreCase)) base.HandleNonHttpsRequest(filterContext); } }
Il metodo di cui abbimo effettuato l'override, ossia HandleNonHttpsRequest, viene chiamato dalla classe base tutte le volte che viene rilevata una connessione non protetta. A questo punto non dobbiamo far altro che verificare se la richiesta appartenga all'area indicata; in caso affermativo invochiamo la versione base del metodo, che effettuerà il redirect della richiesta su protocollo HTTPS.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Potenziare la ricerca su Cosmos DB con Full Text Search
Creare una libreria CSS universale: i bottoni
Managed deployment strategy in Azure DevOps
Eliminare una project wiki di Azure DevOps
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Utilizzare Azure Cosmos DB con i vettori
Implementare l'infinite scroll con QuickGrid in Blazor Server
Gestire gli accessi con Token su Azure Container Registry
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Utilizzare il trigger SQL con le Azure Function
Ordine e importanza per @layer in CSS