【问题标题】:.net mvc routing greedy regex.net mvc 路由贪婪的正则表达式
【发布时间】:2010-12-25 23:26:40
【问题描述】:

在我的 global.asax.cs 文件中。我添加一个条目

       routes.MapRoute(
            "Static text",
            "Static/General/{filePath}",
            new { controller = "Static", Action = "General", filePath = "" },
          //  new { filePath = @"xxxx" } // greedy regular expression
        );

我想做的是从静态文件中获取内容并插入到我的视图页面中。如果我的文件路径位于根目录(例如 1.txt)中,则此映射可以正常工作。但如果文件位于某个子目录(例如 staticfiles/1.txt)中,则它不会起作用。因为路由模块会将 "staticfiles" 视为文件路径,而将 "1.txt" 作为其他参数。我知道我需要做的是在 filePath 参数上应用一些正则表达式技巧。但我不知道如何让正则表达式引擎一直读取到 url 的末尾。有人可以告诉我我应该应用的技巧吗?非常感谢。

【问题讨论】:

    标签: c# .net asp.net-mvc regex


    【解决方案1】:

    尝试在filePath 前加一个星号:

    routes.MapRoute(
        "Static text",
        "Static/General/{*filePath}",
        new { controller = "Static", Action = "General", filePath = "" }
    );
    

    【讨论】:

    • 经过测试,没有用。我的控制器收到 null 作为 filePath 值。
    • 你把这个放在Default路由之前吗?
    • 是的,我确实把它放在了默认路由之前。这是我的倒数第二条路线,默认路线是最后一条。
    • 我打开了 phil haack 的路由调试器,这是结果 url:localhost:4789/static/general/index.htm False Static/General/{*filePath} True {controller}/{action}/{id} ...省略其他信息
    • 我再次检查了我的代码,发现我取消了 // new { filePath = @"xxxx" } // 贪婪正则表达式部分的注释。愚蠢的我!我删除了这条线,现在你的方法效果很好。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多