一、基于路由的版本控制
在ASP.NET Core 中,我們可以通過在路由中添加版本號(hào)來實(shí)現(xiàn)版本控制。
配置路由
首先,在Startup.cs文件的ConfigureServices方法中,注冊(cè)Mvc服務(wù)并配置路由。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddMvc(option => option.EnableEndpointRouting = false)
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddMvcOptions(options =>
{
options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));
});
}
這里的SlugifyParameterTransformer是一個(gè)自定義的參數(shù)轉(zhuǎn)換器,用于將參數(shù)轉(zhuǎn)換為小寫。
定義控制器
創(chuàng)建不同版本的控制器,例如v1和v2版本的ValuesController。
[ApiController]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiVersion("1.0")]
public class ValuesController : ControllerBase
{
// GET api/v1/values
[HttpGet]
public IActionResult Get()
{
return Ok(new string[] { "value1", "value2" });
}
}
[ApiController]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiVersion("2.0")]
public class ValuesControllerV2 : ControllerBase
{
// GET api/v2/values
[HttpGet]
public IActionResult Get()
{
return Ok(new string[] { "value3", "value4" });
}
}
通過在路由中指定v{version:apiVersion},并在控制器上使用[ApiVersion]特性來標(biāo)識(shí)版本。
二、基于查詢字符串的版本控制
除了基于路由的版本控制,還可以通過查詢字符串來實(shí)現(xiàn)版本控制。
配置版本控制選項(xiàng)
在Startup.cs文件的ConfigureServices方法中,配置ApiVersioningOptions。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddApiVersioning(options =>
{
options.AssumeDefaultVersionWhenUnspecified = true;
options.DefaultApiVersion = new ApiVersion(1, 0);
options.ReportApiVersions = true;
options.ApiVersionReader = ApiVersionReader.Query("api-version");
});
}
這里設(shè)置了默認(rèn)版本為1.0,并指定通過查詢字符串a(chǎn)pi-version來讀取版本號(hào)。
定義控制器
與基于路由的版本控制類似,創(chuàng)建不同版本的控制器。
[ApiController]
[Route("api/[controller]")]
[ApiVersion("1.0")]
public class ProductsController : ControllerBase
{
// GET api/products?api-version=1.0
[HttpGet]
public IActionResult Get()
{
return Ok(new string[] { "product1", "product2" });
}
}
[ApiController]
[Route("api/[controller]")]
[ApiVersion("2.0")]
public class ProductsControllerV2 : ControllerBase
{
// GET api/products?api-version=2.0
[HttpGet]
public IActionResult Get()
{
return Ok(new string[] { "product3", "product4" });
}
}
客戶端通過在查詢字符串中傳遞api-version參數(shù)來指定要訪問的版本。
三、基于媒體類型的版本控制
基于媒體類型的版本控制是通過在請(qǐng)求頭中指定Accept媒體類型來實(shí)現(xiàn)的。
配置版本控制選項(xiàng)
在Startup.cs文件的ConfigureServices方法中,配置ApiVersioningOptions。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddApiVersioning(options =>
{
options.AssumeDefaultVersionWhenUnspecified = true;
options.DefaultApiVersion = new ApiVersion(1, 0);
options.ReportApiVersions = true;
options.ApiVersionReader = ApiVersionReader.MediaTypeHeader("ver");
});
}
這里指定通過Accept頭中的ver媒體類型參數(shù)來讀取版本號(hào)。
定義控制器
同樣創(chuàng)建不同版本的控制器。
[ApiController]
[Route("api/[controller]")]
[ApiVersion("1.0")]
[Produces("application/vnd.example.v1+json")]
public class OrdersController : ControllerBase
{
// GET api/orders
[HttpGet]
public IActionResult Get()
{
return Ok(new string[] { "order1", "order2" });
}
}
[ApiController]
[Route("api/[controller]")]
[ApiVersion("2.0")]
[Produces("application/vnd.example.v2+json")]
public class OrdersControllerV2 : ControllerBase
{
// GET api/orders
[HttpGet]
public IActionResult Get()
{
return Ok(new string[] { "order3", "order4" });
}
}
客戶端在請(qǐng)求頭中設(shè)置Accept: application/vnd.example.v1+json或Accept: application/vnd.example.v2+json來指定版本。
以上就是在ASP.NET Core WebAPI 中實(shí)現(xiàn)版本控制的幾種常見方式,開發(fā)者可以根據(jù)實(shí)際需求選擇合適的方式來進(jìn)行版本控制。
該文章在 2025/2/20 9:30:30 編輯過