2009-01-31 2 views
4

Я хочу, чтобы создать ссылку на мою страницу, где пара ключ/значение добавляется к URL динамически, так что:Лучший способ добавить ключ/значение в существующую строку URL?

Default.aspx?key1=value1

становится:

Default.aspx?key1=value1&key2=value2

Для того чтобы существующий запрос сохранял любые ключи в URL-адресе. Кроме того, если ключей нет, тогда мой ключ будет добавлен вместе с «?», поскольку он понадобится.

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

ответ

5

Я знаю, это странно это не поддерживается должным образом в .NET Framework. Пара extensions to UriBuilder сделает все, что вам нужно.

+0

Просто то, что мне нужно, спасибо. UriBuilder имеет некоторые странные/неожиданные поведения, но эти методы расширения сделали то, что я хочу, и работали так, как я ожидал. –

0

Я всегда создавал их сам.

string url = Request.UrlReferrer.PathAndQuery; 

(url[url.Length - 1] != '?' ? "?" : "&") + Url.Encode(key) + "=" + Url.Encode(key) 
  • Url.Encode что-то в ASP.NET MVC
+0

Просто FYI, ваш код будет работать, только если строка ENDS в '?' персонаж. Пример, который я дал в моем вопросе, не будет работать с этим кодом. Он добавит еще один символ? символа URL. –

+0

Я сделал обновление. Попробуйте. – ajma

3

Вы можете использовать класс UriBuilder. См. Пример в документации Query property. FWIW, ASP.NET MVC включает класс UrlHelper, который делает именно такие вещи для среды MVC. Возможно, вам стоит подумать о добавлении метода расширения к классу HttpRequest, который принимает словарь и возвращает подходящий Url на основе заданного запроса и значений словаря. Таким образом, вам нужно будет написать его только один раз.

+0

Будьте осторожны, делая что-то вроде «builder.Query + =« hello = world », UriBuilder, кажется, дает вам дополнительные возможности? разделители каждый раз, когда вы используете + =. –

0

Если вы используете выпуск ASP.NET MVC Framework, я считаю, что есть объект TabBuilder, который позволит вам это сделать. В противном случае вы можете использовать UriBuilder, но вам все равно придется выполнять некоторые синтаксические разборки. Есть некоторые вспомогательные классы онлайн, а также, но я никогда не использовал их, так что я не знаю, насколько хорошо они работают:

Смежные вопросы