怎么做.Net Web Api版本控制/路由为应用客户端?

时间:2017-03-16 14:53:36

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

因此这个问题有几个部分。 2个示例端点(最简单的形式):

user/{id}/profile
movie/{id}/info

我希望创建2个控制器(UserController& MovieController)。

  
      
  1. 如何在控制器名称之前实现视图区域?
  2.   

这两个都是我认为的视图。因此,我想在控制器之前的URL中添加“视图”,因为两个控制器仅提供视图。我后来希望在不同的地方也有一个不返回视图的用户控制器。 但是, ALL 我的终结点应该以 / api / 开头。

即。我想要这个:

api/view/user/{id}/profile
api/view/movie/{id}/info

但是如何在使用“自定义路由”(即:httpConfiguration.MapHttpAttributeRoutes())时注册一个区域( / view / )?我找不到任何这样的例子吗?

  
      
  1. 我应该在哪里进行版本控制?
  2.   

客户端是一个应用程序,需要进行版本控制,以便我们可以在不破坏旧版应用程序的情况下对方法进行更改。

我们不确定放置版本的最佳位置,以及放置如何影响新版本的开发(如果它完全如此?)。

的可能性:

1. api/v1/view/user/{id}/profile
2. api/view/v1/user/{id}/profile
3. api/view/user/{id}/profile/v1
  1. 版本整个API。这会将整个API升级到新版本,即使我们只需要一个方法/端点来进行应用程序更改。 我没有看到任何优势吗?

  2. 版本区域。与上述相同,受影响的控制器略少。

  3. 版本方法。似乎最简单,因为只有单个更改的方法受到影响。但网址非常难看。

  4. 有没有人在MVC或Web Api结构中有一个版本控制的例子,它不会升级整个API,但仍会在其URL中保持一个不错的结构?

1 个答案:

答案 0 :(得分:0)

我最终使用了NightOwl888建议的https://github.com/Microsoft/aspnet-api-versioning

1

使我的2个控制器使用const字段扩展另一个控制器,该字段定义了它们应共享的routeprefix:

protected const string RoutePrefix = "api/view/v{version:apiVersion}";
...
[RoutePrefix(RoutePrefix + "/user")]

2

/ v1 / 的位置与此库无关。并允许更新控制器或个人方法,视情况而定。