条件属性路由
Conditional Attribute Routing
使用属性路由时,是否可以根据某些运行时条件(例如许可)删除路由?
像这样:
[LicensedRoute("/api/whatever")]
其中“/api/whatever”仅在应用程序获得许可的情况下添加到路由 table。
显然我可以明确地在操作方法中进行检查或使用操作过滤器来验证请求,但最终我更希望在软件未获得许可的情况下路由不可用。
您似乎需要属性路由:http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
是RESTful吗?您如何存储许可信息:是用户登录吗?令牌?钥匙?
您可以这样做 RESTful 并强制客户端每次通过基于令牌的身份验证传递令牌,例如:定义多个 "licence" levels/types(例如 Free/Trial/Basic/Pro),然后在持久存储 (table) 中将令牌 (guid) 映射到许可证类型。
然后使用自定义属性,将每个 endpoint/controller/action 标记为可访问的最低要求许可类型(例如 [MinimumLicence("Basic")]
)。然后根据需要的许可证创建"routing tables"。
在这种情况下,您将拒绝访问路由而不是 "remove" 它们。
使用属性路由时,是否可以根据某些运行时条件(例如许可)删除路由?
像这样:
[LicensedRoute("/api/whatever")]
其中“/api/whatever”仅在应用程序获得许可的情况下添加到路由 table。
显然我可以明确地在操作方法中进行检查或使用操作过滤器来验证请求,但最终我更希望在软件未获得许可的情况下路由不可用。
您似乎需要属性路由:http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
是RESTful吗?您如何存储许可信息:是用户登录吗?令牌?钥匙?
您可以这样做 RESTful 并强制客户端每次通过基于令牌的身份验证传递令牌,例如:定义多个 "licence" levels/types(例如 Free/Trial/Basic/Pro),然后在持久存储 (table) 中将令牌 (guid) 映射到许可证类型。
然后使用自定义属性,将每个 endpoint/controller/action 标记为可访问的最低要求许可类型(例如 [MinimumLicence("Basic")]
)。然后根据需要的许可证创建"routing tables"。
在这种情况下,您将拒绝访问路由而不是 "remove" 它们。