Удалить одно значение параметра запроса - PullRequest
0 голосов
/ 09 мая 2018

Можно ли просто удалить значение параметра 1 запроса? (Я думаю о воссоздании списка значений без значения, которое мы хотим удалить, используя RouteValueDictionary и IUrlHelper.ActionContext.HttpContext.Request.Query, но я надеюсь, что есть более простой способ).

Пример:

Оригинальный запрос: localhost:5555/search?cat=none&cat=cat1&cat=cat2

Требуемый запрос (удаление cat1): localhost:5555/search?cat=none&cat=cat2

1 Ответ

0 голосов
/ 09 мая 2018

Один из способов сделать это внутри метода действия контроллера заключается в следующем:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...