public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddApiVersioning(opt =>
{
opt.ReportApiVersions = true;
opt.AssumeDefaultVersionWhenUnspecified = true;
opt.DefaultApiVersion = new ApiVersion(1, );
});
}
在 AddApiVersioning 中有3個設定值,namespace WebAPIVersionDemo.Controllers{
[ApiVersion("1.0")]
[Route("api/[controller]")]
public class ValuesController : Controller {
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "api v1" };
}
}
}
3.2.新增一個 version 2.0 的 Controller (不同 namespace 相同 Controller name)namespace WebAPIVersionDemo.ControllersV2{
[ApiVersion("2.0")]
[Route("api/[controller]")]
public class ValuesController : Controller {
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] {"api v2"};
}
}
}
3.3.預設是 Version 1.0 ,內容如下,namespace WebAPIVersionDemo.Controllers{
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/[controller]")]
public class ValuesController : Controller {
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "api v1" };
}
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddApiVersioning(opt =>
{
opt.ReportApiVersions = true;
opt.AssumeDefaultVersionWhenUnspecified = true;
opt.DefaultApiVersion = new ApiVersion(1, );
opt.ApiVersionReader = new HeaderApiVersionReader("api-version");
});
}
6.3.所以在header 中加入 api-version:1 or api-version:2 就可以呼叫想要的版本,如下,public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddApiVersioning(opt =>
{
opt.ReportApiVersions = true;
opt.AssumeDefaultVersionWhenUnspecified = true;
opt.DefaultApiVersion = new ApiVersion(1, );
opt.ApiVersionReader = new QueryStringOrHeaderApiVersionReader()
{ HeaderNames = { "api-version", "x-ms-version" } };
});
}
這樣子的話,如果 Header 給 api-version:1 或是 x-ms-version:2 都可以。public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddApiVersioning(opt =>
{
opt.ReportApiVersions = true;
opt.AssumeDefaultVersionWhenUnspecified = true;
opt.DefaultApiVersion = new ApiVersion(1, );
opt.ApiVersionReader = new QueryStringOrHeaderApiVersionReader("v")
{ HeaderNames = { "api-version", "x-ms-version" } };
});
}
namespace WebAPIVersionDemo.Controllers{
[ApiVersion("1.0")]
[ApiVersion("3.0")]
[Route("api/[controller]")]
public class ValuesController : Controller {
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "api v1" };
}
}
}
namespace WebAPIVersionDemo.Controllers{
[ApiVersion("1.0")]
[ApiVersion("3.0")]
[Route("api/[controller]")]
public class ValuesController : Controller {
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "api v1" };
}
[HttpGet, MapToApiVersion("3")]
public IEnumerable<string> GetV3()
{
return new string[] { "api v3" };
}
}
}
namespace WebAPIVersionDemo.ControllersNeutral{
[Route("api/[controller]")]
public class RMController : Controller {
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { $"api v {HttpContext.GetRequestedApiVersion()}" };
}
}
}
因為沒有指定版本號,而 ValuesController 中的版本號有 1 ~ 3,所以我們可以呼叫 RMController 並指定版本號為 1 ~ 3。namespace WebAPIVersionDemo.ControllersNeutral{
[ApiVersionNeutral]
[Route("api/[controller]")]
public class RMController : Controller {
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { $"api v {HttpContext.GetRequestedApiVersion()}" };
}
}
}