【发布时间】:2016-08-29 08:25:41
【问题描述】:
我有以下路线:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{service_name}/{controller}/{id}",
defaults: new { service_name = "identity", id = RouteParameter.Optional }
);
我希望这条路线仅适用于以下模式(服务名称应始终为身份):
api/identity/{anyController}/{id}
现在我只需将路线模板更改为
即可完成此操作routeTemplate: "api/identity/{controller}/{id}",
但是我无法从Request.GetRouteData(); 读取“service_name”,因为它不是命名参数。
有没有更简单的方法来做到这一点,而不是创建一个 ActionFilter 来过滤在这种情况下服务名称不是“Identity”的所有请求。
【问题讨论】:
-
看不懂,换成“api/identity/{controller}/{id}”就没有service_name))
-
@ElvinMammadov 如果您将模板硬编码为
api/identity,当您尝试检查 RouteData 字典中的 service_name 时,没有带有service_name键的条目。 -
但是使用 Route 配置,您可以使用 Attribute Routing。 Route config 是个好办法。
-
在控制器上方使用
RoutePrefix属性。喜欢[RoutePrefix("api/identity")],然后在您的操作上方使用[Route("{id}")]。它使您的网址像api/identity/id?id=
标签: c# asp.net asp.net-web-api asp.net-web-api2