友好的URL和查询字符串

时间:2014-02-15 16:53:43

标签: asp.net vb.net url-rewriting

在我的项目(ASP.NET Web窗体)中,我想使用从NuGet安装的Friendly URLs

我在 global.asax 文件中注册 route

Public Shared Sub RegisterRoutes(routes As RouteCollection)  
    routes.MapPageRoute("Route", "default/{id}", "~/default.aspx?id={id}")
End Sub

使用此代码,我可以使用默认/ 123 而不是默认值?id = 123 。我想在网址中添加分配给id的名称。所以我可以这样设置url:default?123-Firstname-Lastnam。名称以单列保存在数据库中。如何将第二个参数(名称)添加到网址,添加符号-并显示没有这样的字母:řčš(因为应用程序是Chech语言。 谢谢你的回答。

1 个答案:

答案 0 :(得分:5)

使用FriendlyUrls ,从NuGet安装后,转到global.asax并启用它:

Imports Microsoft.AspNet.FriendlyUrls

Public Class Global_asax
    Inherits System.Web.HttpApplication

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        RegisterRoutes(RouteTable.Routes)
    End Sub

    Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.EnableFriendlyUrls()
    End Sub
    'rest of global

这就是它。要从页面的网址中获取值,您需要循环访问网址细分(不要忘记Imports Microsoft.AspNet.FriendlyUrls):

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    For Each segment As String In HttpRequestExtensions.GetFriendlyUrlSegments(Request)
        Dim val As String = segment
    Next
End Sub

因此,访问siteURL.com/default/123会循环一次并为您提供123,而siteURL.com/default/122/Bilbo/Baggins会循环三次并为您提供122Bilbo和{{ 1}}。



或者,如果您只想使用普通路由而不是使用FriendlyUrls:

Baggins

关于路由的一个好处是,您可以使用URL来传递可变数据而不使用使用查询字符串。因此传递名称数据的路径可能看起来像

routes.MapPageRoute("id-route", "default/{id}", "~/default.aspx")

然后可以使用Sub RegisterRoutes(ByVal routes As RouteCollection) routes.MapPageRoute("name-route", "default/{id}/{firstName}/{lastName}", "~/default.aspx") End Sub 命中default.aspx并具有:

siteURL.com/default/123/Frodo/Baggins



其他注意事项:如果您只想在单个列中使用名称,则可以合并Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load Dim id As Integer = 0 Int32.TryParse(Page.RouteData.Values("id"), id) Dim firstName As String = Convert.ToString(Page.RouteData.Values("firstName")) Dim lastName As String = Convert.ToString(Page.RouteData.Values("lastName")) 'do something if id > 0 End Sub firstName个变量进行保存。使用lastName作为您所显示的分隔符并不是一个好主意,因为人们可以使用带连字符的名称。将名称保存在单个列中往往会导致问题,因为它会使按名字或姓氏等排序变得更加困难。

此外,您似乎将从-命令插入数据库。我认为使用GETPUT

会更清楚