当前位置:  开发笔记 > 编程语言 > 正文

Asp.Net路由:如何忽略多个通配符路由?

如何解决《Asp.Net路由:如何忽略多个通配符路由?》经验,为你挑选了2个好方法。

我想忽略多个通配符路由.使用asp.net mvc预览版4,它们附带:

RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

我还想添加以下内容:

RouteTable.Routes.IgnoreRoute("Content/{*pathInfo}");

但这似乎打破了我的程序中生成网址的一些助手.思考?



1> Haacked..:

这里有两种可能的解决方案.

    向忽略路由添加约束,以确保只有应忽略的请求才会匹配该路由.有点kludgy,但它应该工作.

    RouteTable.Routes.IgnoreRoute("{folder}/{*pathInfo}", new {folder="content"});
    

    您的内容目录中有什么?默认情况下,路由不会路由磁盘上存在的文件(实际上会检查VirtualPathProvider).因此,如果要将静态内容放在Content目录中,则可能不需要ignore路由.



2> Brad Wilson..:

这可能非常棘手.

当试图弄清楚如何将路线数据映射到路线时,系统当前自上而下搜索,直到找到提供所有必需信息的内容,然后将其他所有内容填充到查询参数中.

由于路径"Content/{*pathInfo}"的所需信息始终完全满足(此路线中根本没有所需数据),并且它位于路线列表的顶部附近,因此您尝试映射到未命名的路线将匹配此模式,您的所有网址都将基于此("内容?action = foo&controller = bar")

不幸的是,行动路线无法解决这个问题.如果使用命名路由(fe,选择Html.RouteLink而不是Html.ActionLink),则可以指定要匹配的路由的名称.它不太方便,但更精确.

IMO,复杂的路由使得动作路由系统基本上都会崩溃.在我有默认路由以外的应用程序的应用程序中,我几乎总是最终恢复到基于命名路由的URL生成,以确保我始终获得正确的路由.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有