【发布时间】:2019-05-24 18:46:27
【问题描述】:
是否可以根据查询字符串中的参数值设置 Web Api 2 路由。
我有以下要求:
/api/controller?data=param.data1 应该转到控制器的操作 1
/api/controller?data=param.data2 应该去控制器的行动 2 数据的任何其他价值必须采取行动 3。
我知道有一个使用正则表达式设置约束的选项,但我发现的示例是针对一般场景的,不像我的那样具体。
这是我尝试过的
config.Routes.MapHttpRoute(
name: "test",
routeTemplate: "api/Hub/{data2}",
defaults: new { action = "Test" },
constraints: new { data2 = @"^(param\.data2)$" }
);
有办法吗?也许有更好的方法?
需要注意的是,我无法更改服务的 URI。它必须有 ?data=[value] 这是遗留系统的后备:(
【问题讨论】:
-
Roman,你能做到吗? stackoverflow.com/questions/21589011/… 暗示它实际上是不可能的,但它引用的页面 (attributerouting.net/#asp-net-web-api) 已经离线几天了,所以我自己无法阅读上下文。我确实在下面尝试了 djikay 的建议,但它对我不起作用。
-
@shanon 不幸的是,djikay 的建议对我也不起作用。我最终编写了一个接受所有请求的控制器,然后根据 ?data= 中的值将它们分派给适当的操作。这是一个丑陋的开关{},但这是我当时能想到的唯一方法。
标签: asp.net-web-api2