Один из способов сделать это внутри метода действия контроллера заключается в следующем:
var queryParms = Request.GetQueryNameValuePairs();
GetQueryNameValuePairs
- это метод расширения , найденный в пространстве имен System.Net.Http.
queryParms
является IEnumerable<KeyValuePair<string, string>>
. Для фильтрации вы можете использовать LINQ:
var queryParms = Request
.GetQueryNameValuePairs()
.Where(kvp => kvp.Key != "excluded key");
Для фильтрации по паре ключ / значение:
var queryParms = Request
.GetQueryNameValuePairs()
.Where(kvp => kvp.Key != "excluded key" && kvp.Value != "excluded value");
Это дает вам список пар ключ / значение, исключая нежелательный параметр запроса. Если вы хотите исключить список ключей, вы можете использовать следующие варианты выше:
var excludedKeys = new[] { "excluded a", "excluded b", "etc" };
var queryParms = Request
.GetQueryNameValuePairs()
.Where(kvp => !excludedKeys.Contains(kvp.Key));
Если вам нужно изменить или заменить значение параметра запроса:
var queryParms = Request.GetQueryNameValuePairs();
var cat = queryParms.FirstOrDefault(x=> x.Key == "cat");
if (cat != null && cat.Value == "cat1")
{
cat.Value = "none";
}
// other stuff with query parms
Как только параметры запроса будут такими, как вы хотите, вам нужно будет восстановить URL. Для этого я обращаю вас к очень хорошему ответу на другой вопрос:
https://stackoverflow.com/a/1877016/47589