gpt4 book ai didi

c# - 路由以反射(reflect) ASP.NET MVC 中的子目录结构

转载 作者:行者123 更新时间:2023-11-30 22:32:41 26 4
gpt4 key购买 nike

我有一个目录类型结构的数据模型,看起来像这样:

Folder:
String Name
Folder Parent
List<File> Files

File
Folder Parent
Content

根级别的文件和文件夹的父级为空。对于导航文件夹,我希望能够拥有类似于以下内容的 url:

http://mysite.com/directoryA/directoryB/directoryC/

我意识到这有点冗余,但我觉得它具有更好的可读性,并且在这种情况下很有意义。使用默认路由,同一个文件夹看起来像:

http://mysite.com/Folder/directorycID

读起来不太好。是否有任何现有模式可以执行此类路由?使用名称而不是 ID 的问题是我必须从根开始跟踪整个结构,因为名称只能保证在父目录中是唯一的。有没有一种路由类型可以只给 Controller 一个目录列表,我可以在 Controller 中理清关系?这会多一点工作,但我可以处理。

最佳答案

不幸的是,ASP.NET MVC 上下文中的 ASP.NET 路由不能很好地处理任意数量的 url 段,例如 folder1/folder2/folderN。你可以做一个包罗万象的路线:

...MapRoute(null, "{*folders}", 
new { controller = "DirectoryStructure", action = "Parse"}
);

DirectoryStructureController.Parse 操作方法将如下所示:

public ActionResult Parse(string folders) {...}

您可以拆分字符串以确定要返回的内容,是重定向到另一个操作,还是返回 HttpNotFound。

更新

上述方法的问题是您的所有 URL 都将被路由到 DirectoryStructureController。您可以通过使用像文件系统这样的前缀来消除它:

...MapRoute(null, "file-system/{*folders}", 
new { controller = "DirectoryStructure", action = "Parse"}
);

然后,请求将不会被路由到这个 Controller ,除非它们像这样以/file-system 为前缀:

http://mysite.com/dirA/dirB/dirN/ <-- will not be routed
http://mysite.com/file-system/dirA/dirB/dirN/ <-- will be routed

更新2

我也刚刚意识到这条路线只适用于解析传入的 URL。您将无法使用它来生成传出 URL。

关于c# - 路由以反射(reflect) ASP.NET MVC 中的子目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8646096/

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