Я работаю над кажущейся простой проблемой: в моем фильтре авторизации я проверяю несколько вещей, если одно из условий не выполняется, мне нужно удалить определенные значения из строки Query и перенаправить пользователя на в результате URL. Однако это дает мне еще несколько проблем, чем хотелось бы. Это выглядит примерно так:
public void OnAuthorization(AuthorizationContext filterContext)
{
if (!SomeCondition()) {
RedirectToCleanUrl(filterContext);
}
}
В моем RedirectToCleanUrl я зачищаю строки запросов и пытаюсь перенаправить их на новый url. Это выглядит так:
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);
}
Прежде всего, это не работает, и даже если это так, это уродливо. Должен быть лучший способ, не так ли? Что мне здесь не хватает?