当版本号未包含在 url 中时如何重定向(网址 Web API 版本控制)



我的 api 控制器中有这个路由属性"[路由前缀("api/v5/test"(]"。我想允许在不指定版本号的情况下使用我的 api。如果 url 中不包含版本号,则服务器会将请求重定向到最新的 api 版本。我该怎么做?

    /
  1. api/v1/products

    config.Routes.MapHttpRoute(
        name: "V1Api",
        routeTemplate: "api/v1/products",
        defaults: new { controller = V1_Products }
    );
    
  2. /
  3. api/v2/products

    config.Routes.MapHttpRoute(
        name: "V2Api",
        routeTemplate: "api/v2/products",
        defaults: new { controller = V2_Products }
    );
    
  4. /
  5. API/产品

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/products",
        defaults: new { controller = V2_Products }
    );
    

无法在控制器上添加多个路由前缀。

一种可能的解决方案是为每个方法添加多个路由。您可以使用"~"指定绝对路径,并忽略控制器的路由前缀。

例:

[RoutePrefix("api/v5/test)]
public class TestV5Controller : ApiController
{
   [Route("{id}")]
   [Route("~/api/latest/test/{id}")]
   [HttpGet]
   public IHttpResult Get()
   {
      return Ok("Hello World");
   }
}

最新更新