使用 friendlyUrl 重新路由查询字符串
Reroute query string using friendlyUrl
我正在尝试在搜索时重写我的 URLs。但我什至无法从我的 URL 中获取段,或者可能没有段但我不知道如何更改它。
我如何尝试在 Find.aspx
页面加载中获取段:
IList <string> segments = Request.GetFriendlyUrlSegments();
for (int i = 0; i < segments.Count; i++)
{
Label1.Text += "- " + segments[i] + " -";
}
这只是为了测试它是否能找到 1 个片段,但它没有。
我也试过这样设置我的 RouteConfig:
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
routes.MapPageRoute("", "Find", "~/Find.aspx");
routes.MapPageRoute("Find", "Find/{Result}", "~/Find.aspx");
}
我想将 URL 更改为:
www.site.com/Find?Result=Test
为此:
www.site.com/Find/Test
或
www.site.com/Test
我"call"link这样Response.redirect("~/Find.aspx?Result=" + searchString)
我也想知道 Localhost:xxxxx/Default
是否意味着当我最终购买域时我的起始页看起来像 www.sitename.com/Default
?如果是这样,我该如何将其重新路由为 www.sitename.com
?
基本上只是想让我的网站更加SEO。
您需要在行下方评论,然后它应该可以工作。
routes.MapPageRoute("", "Find", "~/Find.aspx");
routes.MapPageRoute("Find", "Find/{Result}", "~/Find.aspx");
更多信息 -- Refer this.
这些行的目的
routes.MapPageRoute("", "FindXXX", "~/Find.aspx");
是用FindXXX代替Find.aspx
,这里的FindXXX
是SEO友好名称。并且它不会向 Find.aspx
发送任何参数。
用法 - 它为 Find.aspx
提供 SEO 友好名称。要使用它,您需要点击 url - http://localhost:63197/FindXXX
routes.MapPageRoute("Find", "FindMore/{Result}", "~/Find.aspx");
-- 此行添加 SEO 友好性 + 提供将参数传递给 SEO 友好性的方法 URL.
用法 - URL - http://localhost:63197/FindMore/abc
。要获得价值 - 您需要使用以下 - Page.RouteData.Values["Result"]
为什么它不起作用 - 在你的例子中,这两行的 SEO 友好名称都是 Find
,这对路由引擎造成了混淆,然后失败了。
工作原理
下面是url,我试过了。
输出如下,
我已经在下面评论了。
首先你必须像这样映射页面Url
Routes.MapPageRoute("RouteName", "User/Friendly/Page/Address", "~/OriginalPageAdress.aspx")
Routes.MatPageRoute("Find", "Find/{result}/", "~/Find.aspx")
(/) Character must be place in the last of firendlyUrl b'coz if you enter some text with the space(s) then friendlyUrl will not work Properly.
Protected Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
//Response.RedirectToRoutePermanent("Search", New With {.paramName = "paramValue", ...})
Response.RedirectToRoutePermanent("Find", New With {.result = "Search Value"})
End Sub
要访问 "Search Value" 在“~/Find.aspx”页面中输入以下代码:
Dim SearchValue as String = Page.RouteData.Values("result")
Response.Write(String.Format("Result For : {0}"), SearchValue)
对于Url段
dim Segm = Request.Urls.Segments(0)
我正在尝试在搜索时重写我的 URLs。但我什至无法从我的 URL 中获取段,或者可能没有段但我不知道如何更改它。
我如何尝试在 Find.aspx
页面加载中获取段:
IList <string> segments = Request.GetFriendlyUrlSegments();
for (int i = 0; i < segments.Count; i++)
{
Label1.Text += "- " + segments[i] + " -";
}
这只是为了测试它是否能找到 1 个片段,但它没有。
我也试过这样设置我的 RouteConfig:
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
routes.MapPageRoute("", "Find", "~/Find.aspx");
routes.MapPageRoute("Find", "Find/{Result}", "~/Find.aspx");
}
我想将 URL 更改为:
www.site.com/Find?Result=Test
为此:
www.site.com/Find/Test
或
www.site.com/Test
我"call"link这样Response.redirect("~/Find.aspx?Result=" + searchString)
我也想知道 Localhost:xxxxx/Default
是否意味着当我最终购买域时我的起始页看起来像 www.sitename.com/Default
?如果是这样,我该如何将其重新路由为 www.sitename.com
?
基本上只是想让我的网站更加SEO。
您需要在行下方评论,然后它应该可以工作。
routes.MapPageRoute("", "Find", "~/Find.aspx");
routes.MapPageRoute("Find", "Find/{Result}", "~/Find.aspx");
更多信息 -- Refer this.
这些行的目的
routes.MapPageRoute("", "FindXXX", "~/Find.aspx");
是用FindXXX代替Find.aspx
,这里的FindXXX
是SEO友好名称。并且它不会向Find.aspx
发送任何参数。
用法 - 它为 Find.aspx
提供 SEO 友好名称。要使用它,您需要点击 url - http://localhost:63197/FindXXX
routes.MapPageRoute("Find", "FindMore/{Result}", "~/Find.aspx");
-- 此行添加 SEO 友好性 + 提供将参数传递给 SEO 友好性的方法 URL.
用法 - URL - http://localhost:63197/FindMore/abc
。要获得价值 - 您需要使用以下 - Page.RouteData.Values["Result"]
为什么它不起作用 - 在你的例子中,这两行的 SEO 友好名称都是 Find
,这对路由引擎造成了混淆,然后失败了。
工作原理
下面是url,我试过了。
输出如下,
我已经在下面评论了。
首先你必须像这样映射页面Url
Routes.MapPageRoute("RouteName", "User/Friendly/Page/Address", "~/OriginalPageAdress.aspx")
Routes.MatPageRoute("Find", "Find/{result}/", "~/Find.aspx")
(/) Character must be place in the last of firendlyUrl b'coz if you enter some text with the space(s) then friendlyUrl will not work Properly.
Protected Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
//Response.RedirectToRoutePermanent("Search", New With {.paramName = "paramValue", ...})
Response.RedirectToRoutePermanent("Find", New With {.result = "Search Value"})
End Sub
要访问 "Search Value" 在“~/Find.aspx”页面中输入以下代码:
Dim SearchValue as String = Page.RouteData.Values("result")
Response.Write(String.Format("Result For : {0}"), SearchValue)
对于Url段
dim Segm = Request.Urls.Segments(0)