您可以在 .NET WebApi Route URI 中使用正则表达式进行 API 版本控制吗
Can you use a regex in .NET WebApi Route URI For API Versioning
在 MVC 和 WebApi 中,您可以向路由添加参数约束(参见 http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#constraints)。您甚至可以对参数约束使用正则表达式。但是,我想知道是否可以使用正则表达式来处理 API 版本控制,其中许多路由 could/should 路由到相同的操作。
例如,我正在尝试在实际 URI 中对我的 API 进行版本控制,如下所示:
/api/v3/SomeResource
其中 v3 表示它是 API 的第 3 版。如果我使用 API 的第 3 版,很可能所有三个版本中的许多操作都没有改变,因此需要响应:
/api/v1/SomeResource
/api/v2/SomeResource
/api/v3/SomeResource
因此,我希望能够像这样在我的路由属性中放置一个正则表达式:
[Route("api/v(1|2|3)/SomeResource")] 但它似乎没有将 v(1|2|3) 视为正则表达式,而是将其视为文字。换句话说,对 /api/v1/SomeResource 的请求不会执行此操作。
是否有可能完成我想要完成的事情?有没有办法在我的路线中加入正则表达式?
提前致谢!
不,这是不可能的。每 MSDN.
A URL pattern can contain literal values and variable placeholders (referred to as URL parameters). The literals and placeholders are located in segments of the URL which are delimited by the slash (/) character.
在这种情况下它也不是特别有用,因为您通常会将每个 API 版本路由到一个单独的控制器。因此,每个版本都需要一个单独的路由,而不是匹配所有版本的单个路由。
您已经链接的文档有一个部分专门涵盖了 API versioning(尽管它没有提供太多细节)。
看看这个:
[HttpGet, 路由("Api/v{version:int:regex(1|2|3)}/SomeResource")]
参考:
http://sampathloku.blogspot.com/2013/12/attribute-routing-with-aspnet-mvc-5.html
在 MVC 和 WebApi 中,您可以向路由添加参数约束(参见 http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#constraints)。您甚至可以对参数约束使用正则表达式。但是,我想知道是否可以使用正则表达式来处理 API 版本控制,其中许多路由 could/should 路由到相同的操作。
例如,我正在尝试在实际 URI 中对我的 API 进行版本控制,如下所示:
/api/v3/SomeResource
其中 v3 表示它是 API 的第 3 版。如果我使用 API 的第 3 版,很可能所有三个版本中的许多操作都没有改变,因此需要响应:
/api/v1/SomeResource
/api/v2/SomeResource
/api/v3/SomeResource
因此,我希望能够像这样在我的路由属性中放置一个正则表达式: [Route("api/v(1|2|3)/SomeResource")] 但它似乎没有将 v(1|2|3) 视为正则表达式,而是将其视为文字。换句话说,对 /api/v1/SomeResource 的请求不会执行此操作。
是否有可能完成我想要完成的事情?有没有办法在我的路线中加入正则表达式?
提前致谢!
不,这是不可能的。每 MSDN.
A URL pattern can contain literal values and variable placeholders (referred to as URL parameters). The literals and placeholders are located in segments of the URL which are delimited by the slash (/) character.
在这种情况下它也不是特别有用,因为您通常会将每个 API 版本路由到一个单独的控制器。因此,每个版本都需要一个单独的路由,而不是匹配所有版本的单个路由。
您已经链接的文档有一个部分专门涵盖了 API versioning(尽管它没有提供太多细节)。
看看这个: [HttpGet, 路由("Api/v{version:int:regex(1|2|3)}/SomeResource")]
参考: http://sampathloku.blogspot.com/2013/12/attribute-routing-with-aspnet-mvc-5.html