【问题标题】:Routes starting by开始的路线
【发布时间】:2020-03-10 17:55:40
【问题描述】:

我的网站中有几个以“过滤器...”开头的操作,我的表单使用这些操作来更新部分视图。

我想轻松地路由它们,而不必匹配它们中的每一个。我尝试了一些正则表达式,但没有得到任何结果。

例如:

    data/filterbydate -> should be Controller: Data - Action: filterbydate
    data/filterbyproject -> should be Controller: Data - Action: filterbyproject
    data/filterbyname -> should be Controller: Data - Action: filterbyname
...

事实上,如果我的 RouteConfig 底部没有以下规则,我真的不需要特定的路由

url: "Data/{nodeAlias}"

这迫使我为数据控制器中的每个操作实现路由。

我尝试过url: "Data/Filter{*type}" 或:

 route = routes.MapRoute(
            name: "DataWithAlias",
            url: "Data/{nodeAlias}",
            defaults: new { action = "Detail", controller = "Content", nodeAlias = "" },
            constraints: new { nodeAlias = "^(?!filter$).*$"}
        );

但没有成功...

我正在搜索:

  • 一种将我的所有过滤器操作映射到一条路线的方法
  • 或者一种从 url 中排除的方法:“Data/{nodeAlias}”任何开始 带过滤器*
  • 或者一种避免将这些过滤操作路由为的方法 他们的 URL 已经正确构建以针对正确的 控制器/动作

【问题讨论】:

    标签: asp.net-mvc routes


    【解决方案1】:

    以下是我想要在约束中使用正则表达式的:

            route = routes.MapRoute(
              name: "DataFilter",
              url: "Data/{action}",
              defaults: new { action = "Index", controller = "Data"},
              constraints: new {action = "^filter.*|^GetPDF.*" }
          );
            // A route value determines the culture of the current thread
            route.RouteHandler = new MultiCultureMvcRouteHandler();
    

    【讨论】:

      猜你喜欢
      • 2015-12-03
      • 2013-06-15
      • 2023-03-16
      • 1970-01-01
      • 2020-10-16
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多