Spesso capita di dover eseguire dei routing dinamici all’interno delle applicazioni sviluppate con MVC3 e MVC4 della Microsoft, e molte volte non è possibile eseguire direttamente una redirect, come nel mio caso specifico, dove dovevo eseguire un redirect all’interno del Global.asax, durante la fase di Application_EndRequest, senza scatenare un loop infinito di redirect.
Ci vengono in aiuto le api dell’MVC ed in particolare la RouteData, che permette di passare tutti i dati di chiamata ad una particolare action di uno specifico Controller, instanziato programmaticamente:
var rd = new RouteData();
rd.DataTokens["area"] = null;
rd.Values["controller"] = "NomeController";
rd.Values["action"] = "NomeAction";
IController c = new NomeController();
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));