gpt4 book ai didi

c# - 在 ASP.NET 路由中扩展 RouteCollection

转载 作者:行者123 更新时间:2023-11-30 13:06:56 26 4
gpt4 key购买 nike

我一直在开发一个纯 MVC CMS 的乐趣,并且遇到了一个令人讨厌的 ASP.NET 路由错误/功能。

我的 CMS 中的每个动态 托管页面都与从数据库中提取的特定路由相关联。这些在应用程序启动时加载。当用户添加新页面或编辑现有页面的 Url 时,我需要能够编辑 RouteTable 以相应地插入/编辑路由。

问题在于新路由不需要简单地添加到 RouteCollection 的末尾,而是可能需要插入到特定位置。除了 RouteCollection 只包含一个标准的 Insert(int idx, RouteBase route) 之外,看起来很合乎逻辑。方法继承自 Collection<T>其中不包含路线名称。路线的名称很重要,因为我始终使用它来生成操作链接。

查看反射器,我看不到扩展此集合的简单方法,因为 _namedMap 字典被标记为私有(private)。我尝试在插入点切碎集合并再次重新添加每个项目,但是因为没有方法可以从 RouteCollection 中反向查找路由名称,所以我无法使用它们之前可能拥有的名称重新添加它们。太令人沮丧了!!!

为什么路由名称不是路由对象的属性?为什么如果 MS 认真对待我们扩展 MVC 和路由,他们会使关键类难以扩展?

关于这里的最佳解决方案有什么建议吗?

编辑:

好吧,也许我应该在这里多得多更清楚。我不是在寻找对我的 CMS 设计的批评。我很欣赏这些评论,但这不是我要问的。

简化的问题。如何在运行时将命名路由插入路由集合?类的当前插入方法不够充分,因为它不包含名称。

干杯,

伊恩

最佳答案

如果您查看 ClearItems()方法,这应该提供一种清空路由的方法。如果您首先将路线集合移动到临时集合中(并将新路线也插入其中),请运行 ClearItems() 然后使用 Add() 重新填充。 .

应该提到的是,您还应该使用 GetReadLock()GetWriteLock()以避免您的应用程序中出现潜在冲突。

关于c# - 在 ASP.NET 路由中扩展 RouteCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4204564/

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