У меня есть строка в .NET, которая на самом деле является URL. Я хочу простой способ получить значение из определенного параметра.
Обычно я бы просто использовал Request.Params["theThingIWant"]
, но эта строка не из запроса. Я могу создать новый Uri
элемент, например, так:
Uri myUri = new Uri(TheStringUrlIWantMyValueFrom);
Я могу использовать, myUri.Query
чтобы получить строку запроса ... но тогда мне, очевидно, нужно найти какой-то регулярный способ ее разбиения.
Я упускаю что-то очевидное или нет встроенного способа сделать это, если не создать какое-то регулярное выражение и т. Д.?
HttpUtility.ParseQueryString(myUri.Query).Get(0)
и он извлечет первый параметр. `HttpUtility.ParseQueryString(string)
! Как следует из названия, он предназначен для анализа строк запроса, а не URL-адресов с параметрами запроса. Если вы хотите сделать это, вы должны сначала разделить его?
следующим образом:Url.Split('?')
и получить последний элемент, используя (в зависимости от ситуации и того, что вам нужно)[0]
или LINQLast()
/LastOrDefault()
.Это, вероятно, то, что вы хотите
источник
Вот еще один вариант, если по какой-либо причине вы не можете или не хотите использовать
HttpUtility.ParseQueryString()
.Это сделано для того, чтобы быть несколько толерантным к «искаженным» строкам запроса, то есть
http://test/test.html?empty=
становится параметром с пустым значением. Вызывающий может проверить параметры, если это необходимо.Тест
источник
@Andrew и @CZFox
У меня была та же ошибка, и я обнаружил, что причина в том, что параметр один на самом деле:
http://www.example.com?param1
а неparam1
то, чего можно ожидать.Удаление всех символов до и включая вопросительный знак решает эту проблему. Таким образом, по сути
HttpUtility.ParseQueryString
функция требует только допустимый параметр строки запроса, содержащий только символы после знака вопроса, как в:Мой обходной путь:
источник
ParseQueryString
разбирает строки запроса.Похоже, вы должны перебрать значения
myUri.Query
и проанализировать их оттуда.Однако я бы не стал использовать этот код, не протестировав его на нескольких некорректных URL-адресах. Это может нарушить некоторые / все из них:
hello.html?
hello.html?valuelesskey
hello.html?key=value=hi
hello.html?hi=value?&b=c
источник
Вы можете использовать следующий обходной путь для работы с первым параметром:
источник
Используйте .NET Reflector для просмотра
FillFromString
методаSystem.Web.HttpValueCollection
. Это дает вам код, который ASP.NET использует для заполненияRequest.QueryString
коллекции.источник
Или, если вы не знаете URL (чтобы избежать жесткого кодирования, используйте
AbsoluteUri
Пример ...
источник
если вы хотите получить QueryString на странице по умолчанию. Страница по умолчанию означает ваш URL текущей страницы. Вы можете попробовать этот код:
источник
Это на самом деле очень просто, и это сработало для меня :)
источник
Для тех, кто хочет перебрать все строки запроса из строки
источник
источник
Я использовал его, и он отлично работает
источник