Quando una class library contiene uno o più HttpModule, l'attivazione tramite web.config può risultare molto scomoda, perchè in ogni progetto in cui la utilizziamo dobbiamo ricordarci di aggiungere le opportune righe di configurazione.
Esiste un metodo che invece ci permette di incapsulare tutta questa logica all'interno della libreria, così che l'utilizzatore possa limitarsi solo ad aggiungere la reference. Immaginiamo, per esempio di aver realizzato il modulo seguente, che effettua automaticamente il login come administrator nel caso in cui la richiesta provenga dall'host locale:
public class SampleModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.AuthenticateRequest += (s, e) =>
{
if (HttpContext.Current.Request.IsLocal)
{
var identity = new GenericIdentity("admin");
HttpContext.Current.User =
new GenericPrincipal(identity, new[] { "administrators" });
}
};
}
public void Dispose() { }
}Per poter registrare questo modulo dobbiamo innanzitutto aggiungere alla libreria il package WebActivatorEx tramite NuGet. A questo punto non dobbiamo far altro che creare un metodo senza parametri all'interno di una classe statica, in cui registrare il modulo:
namespace DemoLibrary
{
public static class Initializer
{
public static void Setup()
{
DynamicModuleUtility.RegisterModule(typeof(SampleModule));
}
}
}La classe DynamicModuleUtility proviene dal package Microsoft.Web.Infrastructure che viene installato come dipendenza da WebActivatorEx. Manca solo l'ultimo step, ossia quello di decorare l'assembly con l'attributo PreApplicationStartMethod e referenziare il metodo appena creato:
[assembly: WebActivatorEx.PreApplicationStartMethod( typeof(DemoLibrary.Initializer), "Setup")]
Come anticipato, a questo punto sarà sufficiente aggiungere una reference a questa library da un qualsiasi progetto ASP.NET e, sia che esso girì in modalità classic pipeline che integrated, il nostro modulo verrà attivato in fase di startup ed eseguito a ogni richiesta.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare le View Transition API di JavaScript
Raggruppare risorse in .NET Aspire
Evitare il cache poisoning nei workflow di GitHub
Leggere il contenuto di un file zip tramite le classi del namespace System.IO.Compression
Validazione personalizzata nelle Minimal API di ASP.NET Core
Costruire endpoint SSE in ASP.NET Core
Eseguire una ExecuteUpdateAsync senza usare un'expression con Entity Framework
Creare una chat AI con Angular e React
Usare i generics di C# con la clausola nameof in modo semplificato
Logica Graceful Degradation in HTML e CSS
Dallo sviluppo locale ad Azure con .NET Aspire
I più letti di oggi
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Accedere a dati esposti con WebService con Silverlight 1.0
- Utilizzare dati in formato XML in XAML


