使用 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.

这些行的目的

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

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

  1. 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)