Как вы используете строки запроса с маршрутизацией ASP.NET?
-
03-07-2019 - |
Вопрос
Новая маршрутизация ASP.NET отлично подходит для простых URL-адресов в стиле пути, но если вы хотите использовать URL-адрес, например:
http://example.com/items/search.xhtml?term=Text+to+find&page=2
Нужно ли использовать параметр catch all с проверкой?
Решение
Любые элементы данных представления, которые не указаны в маршруте, автоматически сопоставляются со строкой запроса, поэтому, если вы сопоставляете «items/search.xhtml» с действием:
Search(string term, int page)
Тогда вы должны получить результаты, которые ищете.
Другие советы
Вы также можете сопоставить параметры строки запроса с маршрутами, если вы хотите просто захватить все, что вам нужно, чтобы добавить такой параметр:
{*contentUrl}
Это заполнит остальную часть URL-адреса в эту переменную.
У меня также возникли проблемы с передачей закодированного URL-адреса на маршрут в качестве параметра маршрута.
Вы не можете использовать символы в кодировке URL-адреса в URL-адресе, но можете в строке запроса.
Поэтому мне нужно было, чтобы мой маршрут также содержал элемент строки запроса.
Скажем, у меня есть маршрут:
MapPageRoute("myroute", "myroute/{x}", "~/routehander.aspx")
Но я хочу это в форме:
http://mywebsite.com/myroute/{x}?url=myurl
Мы можем сделать это:
Dim x as integer = 12
Dim rvd As New Routing.RouteValueDictionary
rvd.Add("x", x)
rvd.Add("url", Server.UrlEncode("/default.aspx"))
HttpContext.Current.ApplicationInstance.Response.RedirectToRoutePermanent("myroute", rvd)
Это перенаправит нас на следующий URL:
http://mywebsite.com/myroute/12?url=%252fdefault.aspx
Вы все еще можете использовать Request.QueryString["some_value"];