Estoy trabajando en un problema aparentemente simple: en mi filtro de Autorización estoy buscando algunas cosas si una de las condiciones no se cumple, necesito eliminar ciertos valores de la cadena de consulta y redirigir al usuario a la URL resultante. Sin embargo, esto me está dando algunos problemas más de los que me gustaría. Se ve algo como esto:Eliminar un valor de querystring en MVC3 y redirigir a la URL resultante
public void OnAuthorization(AuthorizationContext filterContext)
{
if (!SomeCondition()) {
RedirectToCleanUrl(filterContext);
}
}
En mi RedirectToCleanUrl Me desnudo las cadenas de consulta e intentar volver a dirigir a la nueva URL. Se ve así:
private void RedirectToCleanUrl(AuthorizationContext filterContext)
{
var queryStringParams = new NameValueCollection(filterContext.HttpContext.Request.QueryString);
// Stripping the key
queryStringParams.Remove("some_key");
var routeValueDictionary = new RouteValueDictionary();
foreach (string x in queryStringParams)
{
routeValueDictionary.Add(x, queryStringParams[x]);
}
foreach (var x in filterContext.RouteData.Values)
{
routeValueDictionary.Add(x.Key, x.Value);
}
filterContext.Result = new RedirectToRouteResult(routeValueDictionary);
}
En primer lugar, no funciona, e incluso si lo hizo, es feo. Debe haber una mejor manera, ¿verdad? ¿Que me estoy perdiendo aqui?