gpt4 book ai didi

.net - 如何使用 ASP.NET 路由路由树结构的 URL?

转载 作者:行者123 更新时间:2023-12-04 15:04:49 24 4
gpt4 key购买 nike

我想实现与 this question 非常相似的东西,有一些增强。

有一个 ASP.NET MVC Web 应用程序。

我有一棵实体树。
例如,Page类有一个名为 Children 的属性,其类型为 IList<Page> . (Page 类的实例对应于数据库中的一行。)

请注意,网站所有者可以随时添加新页面或删除现有页面,并且 URL 也应反射(reflect)这些更改。

我想为每个 Page 分配一个唯一的 URL在数据库中。
我处理Page具有名为 PageController 的 Controller 的对象.

示例 URL:

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 映射到 PageController类(class)

  • 我还找到了 this question , 和 also this onethis one ,但他们没有多大帮助,因为他们没有提供关于我的前两点的解释。

    我看到以下可能的答案:
  • 为每个页面单独映射一条路线。
    这需要我在应用程序启动时遍历整个树,并在路由表的末尾添加一个完全匹配的路由。
  • 我可以添加一条路线 {*path}并编写自定义 IRouteHandler处理它,但我看不出我怎么能处理前两个规则,因为这个处理程序将处理所有事情。

  • 到目前为止,第一个解决方案似乎是正确的,因为它也是最简单的。但是,即使在那种情况下,我也不确定如何制作 PageController来处理请求。

    我真的很感激你对此的想法。

    先感谢您!

    编辑:
    我现在有时间检查我收到的每个答案的各个方面。我接受了尼尔的回答,因为他是对事物如何运作提供最佳解释的人。我也赞成所有其他答案,因为它们提供了好主意。

    最佳答案

    路由按照它们添加到集合中的顺序进行处理。您可以在现有路由之后添加自定义路由,以确保它是最后一个有机会处理请求的路由。这将允许您在它之前为现有文件(虚拟或其他)添加路由,因此满足条件 1 和 2。

    默认情况下,MVC 路由会在应用存储在路由集合中的任何路由之前路由到现有文件;见 http://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.routeexistingfiles.aspx . (给保罗的提示 - 见评论)。

    要将请求路由到页面 Controller ,只需创建一个自定义路由来检查虚拟路径,如果它与数据库中页面的模式匹配,则返回 RouteData .设置您的 RouteData使用从虚拟路径中提取的适当值(例如将 Path 键设置为/Parent/Child/Grandchild),将 Controller 键设置为您的页面 Controller 名称(例如页面),并将操作设置为您要执行的操作的名称(例如显示)。 RouteData应该使用 MvcRouteHandler 创建(不确定这是否是正确的类名)。

    要确保正确返回数据库驱动页面的 url,请覆盖 GetVirtualPath( RequestContext, RouteValueDictionary )RouteBase的方法并使用传入的路由值来确定这是否是数据库驱动的页面以及它是否创建所需的虚拟路径数据(否则返回 null)。

    有关覆盖的帮助 GetRouteDataGetVirtualPath ,看System.Web.Routing.RouteBase的反射(reflect)源码和 System.Web.Routing.Route ;之后谷歌是你的 friend 。

    反向使用路由来确定给定 Controller 、操作和任何其他路由值的 url。您应该能够利用它在请求的上下文中构建页面的 url。

    关于.net - 如何使用 ASP.NET 路由路由树结构的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2890104/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com