使用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 重新路由查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将查询字符串添加到 php 中的路由?

Laravel 路由:使用 URL 查询字符串时如何路由?

使用路由与查询字符串参数是否有误? [关闭]

使用属性路由时查询字符串不起作用

使用和不使用查询字符串路由遗留请求

如何使用可选的查询字符串参数测试 MVC 路由