微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-mvc-3 – 如何在MVC路由中组合CatchAll和EndsWith?

以下路由将匹配BasePath下面的任何文件夹结构:
http://BasePath/{*SomeFolders}/

如何创建另一个匹配同一BasePath结构下的任何zip文件的路由?

我试过这个……

http://BasePath/{*SomeFolders}/{ZipFile}

……但它错了

包含多个节的路径段(例如文字节或参数)不能包含catch-all参数.
参数名称:routeUrl

我该怎么做呢?

*更新*

原来的要求实际上是有缺陷的.
{ZipFile}将匹配最后一节,无论它包含什么. (文件文件夹)

实际上我相信我想要匹配的路线模式应该是:

http://BasePath/{*SomeFolders}/{ZipFile}.zip

解决方法

抓住URL中的任何位置 – 正是您所需要的

我写过这样的Route类,它允许你完全按照你描述的那样做.它允许您将catch-all段作为路径定义中的第一个段(或实际上的任何其他段).它允许您将路线定义为:

"BasePath/{*SomeFolders}/{ZipFile}"

整个过程在my blog post中有详细描述,您可以在这里找到此Route类的代码.

附加信息

基于添加的信息,我仍然宁愿使用不排除路径段参数之外的文件扩展名的第一个路由定义,而是为最后一个添加约束

"[a-zA-Z0-9_]+\.zip"

所以路由仍然应该如上所述在我的答案中定义,但ZipFile的约束应该如前所述定义.这将使我的特殊路线像现在一样开箱即用.

为了使其适用于其他路由分隔符(如示例中的点),代码应该进行相当大的更改,但如果您知道路由的工作方式非常好,则可以将其更改为以这种方式工作.

但我宁愿建议你保持简单并添加约束.

原文地址:https://www.jb51.cc/aspnet/245142.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐