【问题标题】:How do I create a route for matching all paths starting with a given prefix?如何创建路由以匹配以给定前缀开头的所有路径?
【发布时间】:2011-10-03 08:53:35
【问题描述】:

在我的 MVC 应用程序中,我想创建一个路由,以便当用户请求以前缀开头的 URL 时,会调用一些特定的操作。

例如,我想要一个将processData{whatever} 映射到一个动作的路由,这样当用户请求processDataprocessData.asmxprocessDataZOMG 或任何其他带有processData 前缀的东西时,该动作就会被调用。

我尝试了以下路线

routes.MapRoute(
    @"ProcessData", @"processData*", //<<<< note asterisk
    new { controller = @"Api", action = @"ProcessData" } );

但它不匹配 processData 和任何带有该前缀的东西 - 路由匹配失败并且请求被重定向到主页。

如何创建一个将所有带有特定前缀的路径匹配到特定控制器-动作对的路由?

【问题讨论】:

    标签: asp.net asp.net-mvc iis url-routing asp.net-mvc-routing


    【解决方案1】:

    尝试以下操作: 更新:此解决方案不起作用,请参阅我在对此答案的评论中提供的解决方案。

    routes.MapRoute(
        @"ProcessData", @"processData/{*appendix}", //<<<< note asterisk
        new { controller = @"Api", action = @"ProcessData" } );
    

    【讨论】:

    • 这与processDataX不匹配。
    • 你是对的。但是,您可以实现一个自定义 IRouteHandler 来检查最后一个斜杠后面的部分(假设您修剪了尾随斜杠)是否以“processData”开头。
    【解决方案2】:

    你可以使用路由约束:

    routes.MapRoute(
        "ProcessData", // Route name
        "{token}", // URL with parameters
        new { controller = "Api", action = "ProcessData" }, // Parameter defaults
        new { token = @"^processdata.*" } // constraints
    );
    

    【讨论】:

      猜你喜欢
      • 2019-01-19
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 2016-12-31
      • 2015-08-05
      相关资源
      最近更新 更多