Archive for October 2011
Modificar el valor de Request.Param o QueryString
Hace unos días necesité modificar el valor de Request.Param y de la QueryString en una página ASP.NET. Parece que no es algo común pero sin embargo, había gente que también había necesitado hacerlo.
La manera de hacerlo fue usando un HttpModule y usando un poco de Reflection. La verdad algo bastante sencillo de hacer y con un buen resultado.
public class ChangeParamsModule : IHttpModule { public void Dispose() { throw new NotImplementedException(); } public void Init(HttpApplication context) { context.BeginRequest += (sender, e) => { HttpApplication httpContext = (HttpApplication)sender; // reflect to getting readonly property PropertyInfo isReadOnly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic); // make collection editable isReadOnly.SetValue(httpContext.Request.QueryString, false, null); isReadOnly.SetValue(httpContext.Request.Params, false, null); httpContext.Request.QueryString.Set("nuevoParam", "nuevoValor"); httpContext.Request.Params.Set("nuevoParm", "nuevoValor"); // make collection readonly again isReadOnly.SetValue(httpContext.Request.QueryString, true, null); isReadOnly.SetValue(httpContext.Request.Params, true, null); }; } }