【发布时间】:2011-02-22 19:45:38
【问题描述】:
我想实现与this question 非常相似的东西,并进行一些改进。
有一个 ASP.NET MVC Web 应用程序。
我有一棵实体树。
例如,Page 类具有名为 Children 的属性,其类型为 IList<Page>。 (Page 类的一个实例对应于数据库中的一行。)
请注意,网站所有者可以随时添加新页面或删除现有页面,并且 URL 也应反映这些更改。
我想为数据库中的每个 Page 分配一个唯一的 URL。
我使用名为PageController 的控制器处理Page 对象。
示例网址:
http://mysite.com/Page1/
http://mysite.com/Page1/SubPage/
http://mysite.com/Page/ChildPage/GrandChildPage/
你明白了。
因此,我希望每个 Page 对象都有自己的 URL,该 URL 等于其父 URL 加上自己的名称。
除此之外,我还希望能够将单个 Page 映射到 /(根)URL。
我想应用这些规则:
- 如果可以使用任何其他路由处理 URL,或者文件系统中存在指定 URL 的文件,则让默认 URL 映射发生
- 如果虚拟路径提供程序可以处理 URL,则让其处理
- 如果没有其他,则将其他 URL 映射到
PageController类
我还找到了this question、also this one 和 this one,但它们并没有太大帮助,因为它们没有对我的前两点提供解释。
我看到以下可能的解决方案:
- 为每个页面单独映射路线。
这需要我在应用程序启动时遍历整个树,并将完全匹配的路由添加到路由表的末尾。 - 我可以使用
{*path}添加一个路由并编写一个自定义的IRouteHandler来处理它,但是我看不出我该如何处理前两个规则,因为这个处理程序将处理所有事情。
到目前为止,第一个解决方案似乎是正确的,因为它也是最简单的。但是,即使在那种情况下,我也不确定如何让 PageController 来处理请求。
非常感谢您对此的看法。
提前谢谢你!
编辑: 我现在有时间检查我收到的每个答案的各个方面。我接受了尼尔的回答,因为他是对事情如何运作提供最佳解释的人。我还赞成所有其他答案,因为它们提供了很好的想法。
【问题讨论】:
标签: .net asp.net asp.net-mvc routing asp.net-routing