是否可以在 .NET WebApi Route URI 中使用正则表达式进行 API 版本控制



在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 的请求不会执行此操作。

是否有可能完成我想要完成的任务? 有没有办法在我的路线中放置正则表达式?

提前感谢!

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

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

不,这是不可能的。根据 MSDN。

URL

模式可以包含文本值和变量占位符(称为 URL 参数)。文本和占位符位于由斜杠 (/) 字符分隔的 URL 段中。

在这种情况下,它也不是特别有用,因为您通常会将每个 API 版本路由到单独的控制器。因此,每个版本都需要单独的路由,而不是与所有版本匹配的单个路由。

您已经链接的文档有一个专门介绍 API 版本控制的部分(尽管它没有提供太多细节)。

最新更新