1

我是新的 ASP.NET 路由,有一个问题。

在我正在开发的网站上,访问者注册并创建一个帐户(带有显示名称),例如 JohnDoe,并且该网站会使用与显示名称有关的信息进行个性化设置。

例如(按照路由表的顺序,我目前有):

http://www.domain.com/          -   Generic index page
http://www.domain.com/Page1     -   Generic page1
http://www.domain.com/Page2     -   Generic page2
http://www.domain.com/JohnDoe       -   Personalised index page
http://www.domain.com/JohnDoe/Page1 -   Personalised page1
http://www.domain.com/JohnDoe/Page2 -   Personalised page2

以上工作正常(我只是对每一种可能性都有一个规则)。

我的问题是,我现在需要在网站页面上创建 asp:HyperLink 控件。目前,我正在使用这个:

NavigateUrl="<%$ RouteUrl:RouteName=ROUTENAME %>"

....在 HyperLink 控件的标记中

给定以下地址,我该怎么做....

http://www.domain.com/Example       -   Generic example page
http://www.domain.com/JohnDoe/Example   -   Personalised example page

....match ROUTENAME,第一个参数可以是可选的吗?

我显然可以创建两条路线,如下......

Routes.MapPageRoute("Example_No_Displayname", "Example", "~/Example.aspx")
Routes.MapPageRoute("Example_With_Displayname", "{Code}/Example", "~/Example.aspx")

....但这意味着路由名称需要不同,我需要绑定超链接控件以匹配它们。

我希望我已经明确表达了自己,并且我感谢社区可能提供的任何帮助。

4

2 回答 2

0

将用户名本身放在 URL 中会有些不典型。实际的用户身份/名称通常会从一些已建立的安全上下文/令牌中提取,例如 cookie,因此您可以对匿名页面和个性化页面使用相同的 URL。您希望在 URL 中包含用户名是否有特定原因?

于 2013-05-28T22:29:44.590 回答
0

如果您使用GetRouteUrl方法,则不需要直接匹配路由名称。这样,您仍然可以使用完成这项工作所需的两条路线。在此处查看完整示例。

于 2013-05-30T13:16:53.677 回答