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