路由以反映ASP中的子目录结构.净MVC
本文关键字:子目录 结构 MVC ASP 路由 | 更新日期: 2023-09-27 18:18:48
目录类型结构的数据模型如下所示:
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的问题是,我必须从根跟踪整个结构,因为名称只能保证在父目录中是唯一的。是否有一种路由类型可以给控制器一个目录列表,然后我可以在控制器中整理出关系?虽然工作量会大一些,但我能应付得来。
不幸的是,. NET路由在ASP. NET上下文中。. NET MVC不能很好地处理任意数量的url段,比如folder1/folder2/folderN。你可以做一个全局路由:
...MapRoute(null, "{*folders}",
new { controller = "DirectoryStructure", action = "Parse"}
);
DirectoryStructureController。解析动作方法看起来像这样:
public ActionResult Parse(string folders) {...}
您可以拆分字符串以确定返回哪个内容,是否重定向到另一个操作,或者返回HttpNotFound。
上述方法的问题是,您的所有URL将被路由到DirectoryStructureController。您可以通过使用filesystem:
这样的前缀来消除这个问题。...MapRoute(null, "file-system/{*folders}",
new { controller = "DirectoryStructure", action = "Parse"}
);
那么,请求将不会被路由到这个控制器,除非它们像这样带有/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。