Posts Tagged ‘reflection’
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);
};
}
}