【问题标题】:Reroute query string using friendlyUrl使用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。

【问题讨论】:

    标签: asp.net webforms friendly-url


    【解决方案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.

      这些行的目的

      1. routes.MapPageRoute("", "FindXXX", "~/Find.aspx"); 是将Find.aspx 替换为FindXXX,这里FindXXX 是SEO 友好名称。而且它不会向Find.aspx 发送任何参数。

      用法 - 它为 Find.aspx 提供 SEO 友好名称。要使用它,您需要点击 url - http://localhost:63197/FindXXX

      1. 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 友好,它应该可以工作,只需清理并重建项目。
      猜你喜欢
      • 1970-01-01
      • 2015-04-12
      • 2013-11-02
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      相关资源
      最近更新 更多