新的ASP.NET路由非常适合简单路径样式的URL,但是如果你想使用如下的URL:
http://example.com/items/search.xhtml?term=Text+to+find&page=2
您是否必须使用catch all参数进行验证?
答案 0 :(得分:3)
如果您想捕获添加参数所需的所有内容,也可以将查询字符串参数与路径匹配:
{*}的contentURL
将把剩下的url填充到该变量中。
答案 1 :(得分:2)
路径中未列出的任何视图数据项都会自动映射到查询字符串,因此如果您将“items / search.xhtml”映射到某个操作:
Search(string term, int page)
然后你应该得到你想要的结果。
答案 2 :(得分:0)
我也无法将编码后的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)
这会将我们重定向到以下网址:
http://mywebsite.com/myroute/12?url=%252fdefault.aspx
答案 3 :(得分:0)
您仍然可以使用Request.QueryString["some_value"];