使用friendlyUrl 重新路由查询字符串
Posted
技术标签:
【中文标题】使用friendlyUrl 重新路由查询字符串【英文标题】:Reroute query string using friendlyUrl 【发布时间】:2015-05-05 11:58:21 【问题描述】:我在进行搜索时尝试重写我的 URL。但我什至无法从我的 URL 中获取分段,或者可能没有分段但我不知道如何更改它。
我如何尝试在Find.aspx
pageload 中获取细分:
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
我像这样“调用”链接Response.redirect("~/Find.aspx?Result=" + searchString)
我也想知道Localhost:xxxxx/Default
是否意味着当我最终购买一个域时,我的起始页会看起来像www.sitename.com/Default
?如果是这样,我该如何将其重新路由为 www.sitename.com
?
基本上只是想让我的网站更加 SEO。
【问题讨论】:
【参考方案1】:首先你必须像这样映射Page 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
要访问“搜索值”,请在“~/Find.aspx”页面中输入以下代码:
Dim SearchValue as String = Page.RouteData.Values("result")
Response.Write(String.Format("Result For : 0"), SearchValue)
对于 UrlSegments
dim Segm = Request.Urls.Segments(0)
【讨论】:
【参考方案2】:您需要在下面几行注释,然后它应该可以工作。
routes.MapPageRoute("", "Find", "~/Find.aspx");
routes.MapPageRoute("Find", "Find/Result", "~/Find.aspx");
更多信息 -- Refer this.
这些行的目的
routes.MapPageRoute("", "FindXXX", "~/Find.aspx");
是将Find.aspx
替换为FindXXX,这里FindXXX
是SEO 友好名称。而且它不会向Find.aspx
发送任何参数。
用法 - 它为 Find.aspx
提供 SEO 友好名称。要使用它,您需要点击 url - http://localhost:63197/FindXXX
routes.MapPageRoute("Find", "FindMore/Result", "~/Find.aspx");
-- 这一行增加了 SEO 友好性 + 提供了将参数传递给 SEO 友好 URL 的方法。
用法 - 网址 - http://localhost:63197/FindMore/abc
。要获得价值 - 你需要使用以下 - Page.RouteData.Values["Result"]
为什么它不起作用 - 在您的情况下,这两行的 SEO 友好名称都为 Find
,这让路由引擎感到困惑,然后失败了。
工作原理
以下是网址,我试过了。
下面是输出,
我在下面发表了评论。
【讨论】:
哦,所以代码以某种方式与 FriendlyUrls 混淆了。那么我现在如何重定向到“查找”?在我使用Response.redirect("Find.aspx?Result=" + query)
之前。我应该用什么替换这条线?我的问题不是我无法获取值,我想将 URL 中的 ?Result=
替换为 /
以便它是 SEO
我认为您正在尝试解释如何从 URL 获取值。我想通过删除 ?Result=
并将其替换为 /
来使 URL 对 SEO 更友好。所以www.site.com/Find?Result=query
变成www.site.com/Find/query
是的,你最后的评论是对的,应该是www.site.com/Find/query
,代码是我建议的。
但是怎么做呢?除了注释 2 行之外,您没有更改任何内容?这对我不起作用
这就是 FriendlyURL 的魔力,只需要这 3 行和 DLL 引用,它就会使 .aspx
文件对 SEO 友好,它应该可以工作,只需清理并重建项目。以上是关于使用friendlyUrl 重新路由查询字符串的主要内容,如果未能解决你的问题,请参考以下文章