asp.net - 您可以在 .NET WebApi Route URI 中使用正则表达式进行 API 版本控制吗

标签 asp.net .net asp.net-mvc asp.net-web-api asp.net-web-api-routing

在 MVC 和 WebApi 中,您可以向路由添加参数约束(参见 http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#constraints )。您甚至可以对参数约束使用正则表达式。但是,我想知道是否可以使用正则表达式来处理 API 版本控制,其中许多路由可以/应该路由到相同的操作。

例如,我正在尝试像这样在实际 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 的请求不会执行此操作。

是否有可能完成我想要完成的事情?有没有办法在我的 route 加入正则表达式?

提前致谢!

最佳答案

看看这个: [HttpGet, Route("Api/v{version:int:regex(1|2|3)}/SomeResource")]

引用: http://sampathloku.blogspot.com/2013/12/attribute-routing-with-aspnet-mvc-5.html

关于asp.net - 您可以在 .NET WebApi Route URI 中使用正则表达式进行 API 版本控制吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29045088/

相关文章:

c# - Win32Exception 存储空间不足,无法处理此命令

c# - 使用 .NET 在 sAMAccountName 中创建超过 20 个字符的用户时出错

使用 jQuery.Templates 场景进行 jQuery 验证

c# - Asp.net MVC Bundle 能否在 CSS 中改造 LESS?

javascript - 如何将默认下拉样式更改为导航栏链接并且默认选择事件仍然有效?

ASP.NET 连接字符串加密/保护

c# - 从数据库中获取单个随机值

c# - 带有 retrofit 的多部分内容

c# - 我该如何解决这个 "System.Data.Entity.DynamicProxies"错误

c# - ASP.NET 中不存在数据时的无效读取尝试