Подтвердить что ты не робот

URL Querystring - поиск, замена, добавление, обновление значений?

Мы унаследовали некоторый код С# как часть проекта от другой компании, которая перенаправляет URL-адреса, которая изменяет существующую строку запроса, изменяя значения элементов, добавляя новые параметры и т.д. по мере необходимости. Однако проблема заключается в том, что код в лучшем случае глючит, и в итоге он дублирует элементы в строке запроса, а не обновляет их должным образом. Код работает на первом проходе, но при дополнительных вызовах проблемы с дублированием становятся очевидными.

Пример: MyPage.aspx? startdate = 08/22/09 & startdate = 09/22/09

Вместо дублирования элемента он должен быть обновлен с новым значением, если он уже существует, или добавлен, если он уже не существует.

Существует ли класс С# или набор функций для обработки строк запроса, что позволяет простому доступу и обновлению/добавлению параметров, которые затрагивают эти проблемы, вместо подхода "слепой", который, кажется, используется сейчас с кодом? Это должно быть в состоянии обрабатывать несколько параметров, которые могут или не могут существовать в любое время и быть добавлены и обновлены при последующих вызовах.

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

4b9b3361

Ответ 1

Да, я бы предложил преобразовать последовательность запросов в коллекцию с помощью HttpUtility.ParseQueryString()

Затем вы можете найти/добавить/обновить/заменить значения непосредственно в коллекции, прежде чем повторно создать запрос из этой коллекции.

Это должно облегчить обнаружение дубликатов.

Ответ 2

Вы можете получить доступ и управлять всеми значениями своего Querystring с помощью коллекции Request.QueryString. Здесь ссылка .

Ответ 3

это кажется основной проблемой проектирования.

вместо обновления текущей строки запроса, что ДОЛЖНО быть сделано, просто добавляет все параметры к базе каждый раз.

уверен, вы можете его обновить, но (псевдокод)

if querystring exists
  then update query string
else
  add query string

сойдет с ума, когда вы начнете использовать более 1 переменной.

Реорганизация

была бы лучше всего, если бы это было возможно.

Ответ 4

WCF REST Starter Kit, доступный на ASP.NET, также включает новый вспомогательный класс HttpQueryString, который, скорее всего, будет включен в .NET 4.0 в библиотеку базового класса.

Посмотрите отличный скринкаст о том, как использовать этот класс утилиты здесь:

http://channel9.msdn.com/shows/Endpoint/endpointtv-Screencast-HttpClient-Query-String-and-Form-Input-Management/

Марк