Удалить одно значение параметра запроса

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

Пример:

Исходный запрос: localhost:5555/search?cat=none&cat=cat1&cat=cat2

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

В каком месте конвейера Asp.Net вы ожидаете, что это произойдет?

user47589 09.05.2018 22:41

@ Эми, я не понимаю твой вопрос.

Haytam 09.05.2018 22:43

Вы знаете, что такое конвейер Asp.Net является?

user47589 09.05.2018 22:43

Неа. Нужно ли мне знать, что это такое, чтобы выполнять такую ​​"простую" задачу?

Haytam 09.05.2018 22:44

Ответ зависит от того, когда вы ожидаете, что это произойдет. Вы можете написать промежуточное программное обеспечение Owin, использовать фильтр действий веб-API, использовать делегирующий обработчик веб-API, сделать это в самом контроллере веб-API ... то, как вы это делаете, может повлиять на все, что размещено в Owin, или только веб-API, или веб-интерфейс. API и некоторый другой набор компонентов.

user47589 09.05.2018 22:46

О, теперь я понимаю. Я хочу использовать его в контроллере (я делаю систему фильтров и хочу удалить определенный фильтр из запроса).

Haytam 09.05.2018 22:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
624
1

Ответы 1

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

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

Это удаляет весь параметр запроса, если вы посмотрите на мой пример, я хочу удалить только одно конкретное значение (cat1 в примере из none, cat1, cat2.

Haytam 09.05.2018 23:04

Тогда измените его на фильтр по Value. Общий принцип тот же.

user47589 09.05.2018 23:05

Спасибо, но как я могу использовать это для восстановления URL-адреса?

Haytam 09.05.2018 23:12

Используйте класс Uri (или класс UriBuilder), но зачем вам это нужно?

user47589 09.05.2018 23:13

Потому что я делаю систему фильтров, и если пользователь хочет удалить фильтр, я удалю его из запроса.

Haytam 09.05.2018 23:15

Мы уже удалили его из запроса. Зачем реконструировать новый URL?

user47589 09.05.2018 23:16

Потому что я буду использовать его в элементе <a>. Я что-то делаю неправильно?

Haytam 09.05.2018 23:18

Другие вопросы по теме