asp.net-mvc-3 - 如何在MVC route 组合CatchAll和EndsWith?

标签 asp.net-mvc-3

以下路由将匹配BasePath下的任何文件夹结构:

http://BasePath/{*SomeFolders}/ 

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

我试过了...
http://BasePath/{*SomeFolders}/{ZipFile}

...但是错误

包含多个部分(例如文字部分或参数)的路径段不能包含全部参数。
参数名称:routeUrl

我应该如何处理?

* 更新*

最初的要求实际上有缺陷。
{ZipFile}将匹配最后一部分,无论其包含什么内容。 (文件或文件夹)

实际上,我认为我要匹配的路线模式应为:
http://BasePath/{*SomeFolders}/{ZipFile}.zip

最佳答案

捕获URL中所有位置的内容-正是您所需要的

我已经编写了此类Route类,使您可以完全按照自己的描述进行操作。它允许您将全部捕获段作为路由定义中的第一个段(或其他任何实际位置)。它将允许您将路线定义为:

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

整个过程在my blog post上进行了非常详细的描述,您可以在其中找到Route类的代码。

附加信息

根据添加的信息,我仍然希望使用第一个路由定义,该定义不将文件扩展名排除在路由段参数之外,而是为最后一个段添加约束
"[a-zA-Z0-9_]+\.zip"

因此,路由仍应按照我在答案中的说明进行定义,但是ZipFile的约束应按先前编写的定义。这将使我的特殊路线像现在一样开箱即用。

为了也使其适用于其他路由定界符(例如示例中的点),应该对代码进行相当大的更改,但是如果您非常了解路由的工作原理,则可以将其更改为这种方式。

但是我宁愿建议您保持简单并添加约束。

关于asp.net-mvc-3 - 如何在MVC route 组合CatchAll和EndsWith?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10114352/

相关文章:

.net - ASP.Net MVC2到MVC3升级-Assembly引用问题

asp.net-mvc-3 - 如何将 IEnumerable 对象或数据从 View 传递到 Controller ?

asp.net-mvc - 在 ASP.NET MVC4 中存储用户信息的策略是什么

asp.net-mvc - razor ActionLink 中的 Javascript 变量

asp.net-mvc-3 - MVC : No parameterless constructor defined for this object

asp.net-mvc-3 - ASP.NET MVC3,启用 Razor

asp.net-mvc - MVC View 可以像 web.config 文件那样针对多个部署进行转换吗?

asp.net-mvc-3 - 带有集合的提交对象缺少新集合数据

ajax - 使用 Ajax 表单和分页 - 在下一页选择时丢失搜索参数

asp.net - Foreach MVC3 成员(member)用户