URL Querystring - поиск, замена, добавление, обновление значений?
Мы унаследовали некоторый код С# как часть проекта от другой компании, которая перенаправляет URL-адреса, которая изменяет существующую строку запроса, изменяя значения элементов, добавляя новые параметры и т.д. по мере необходимости. Однако проблема заключается в том, что код в лучшем случае глючит, и в итоге он дублирует элементы в строке запроса, а не обновляет их должным образом. Код работает на первом проходе, но при дополнительных вызовах проблемы с дублированием становятся очевидными.
Пример: MyPage.aspx? startdate = 08/22/09 & startdate = 09/22/09
Вместо дублирования элемента он должен быть обновлен с новым значением, если он уже существует, или добавлен, если он уже не существует.
Существует ли класс С# или набор функций для обработки строк запроса, что позволяет простому доступу и обновлению/добавлению параметров, которые затрагивают эти проблемы, вместо подхода "слепой", который, кажется, используется сейчас с кодом? Это должно быть в состоянии обрабатывать несколько параметров, которые могут или не могут существовать в любое время и быть добавлены и обновлены при последующих вызовах.
Мы скорее используем существующую логику, чем если возможно, воссоздаем что-то, чтобы быстро решить эту проблему с помощью полустандартного пути для будущей ремонтопригодности и повторного использования.
Ответы
Ответ 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/
Марк