[英]Get ASP.NET Core API version programmatically in integration test
[英]ASP.NET Core API version
我正在嘗試使用 ASP.NET 內核及其版本創建 API。 我安裝了Microsoft.AspNetCore.Mvc.Versioning
。 我喜歡的就是API,版本在URL,所以很容易理解我用的是什么版本的API。 例如/api/v1/TableAzureCategory
。
為此,在我的Startup.cs
中,我添加了以下代碼行:
services.AddApiVersioning(config =>
{
config.DefaultApiVersion = new ApiVersion(1, 0);
config.AssumeDefaultVersionWhenUnspecified = true;
config.ReportApiVersions = true;
config.ApiVersionReader = new UrlSegmentApiVersionReader();
});
然后,在我的 API controller 我添加了一些裝飾
[ApiController]
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/[controller]")]
public class TableAzureCategoryController : ControllerBase
{
}
我運行應用程序,打開 Swagger 這就是我看到的(基本上{version:apiVersion}
不會被 API 版本替換)
我環顧四周,但我發現只有我上面的實現。 有任何想法嗎?
實現此目的的另一種方法是創建基於查詢的版本控制解決方案。
假設我們有兩個控制器:ExampleV1Controller 和 ExampleV2Controller
using Microsoft.AspNetCore.Mvc;
namespace MyAPI.Controllers
{
[ApiController]
[ApiVersion("1.0")]
[Route("api/example")]
public class ExampleV1Controller : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return new OkObjectResult("Example API v1");
}
}
[ApiController]
[ApiVersion("2.0")]
[Route("api/example")]
public class ExampleV2Controller : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return new OkObjectResult("Example API v2");
}
}
}
根據您的 Startup.cs 配置,它將默認為 API 版本 1.0。 要向 V2 版本發出請求,請使用https://localhost:5001/api/example?api-version=2.0
。
我自己沒有對此進行測試,但它應該可以工作。
{version}
路由參數的行為與任何其他路由參數一樣。 如果路由是values/{id}/subvalues
你會期望一個必須填寫的名為id
的參數。
API Explorer 擴展用於 API 版本控制知道與 API 關聯的版本。 此值用作默認值,但 OpenAPI/Swagger 生成器(例如:Swashbuckle)可能不會在沒有一點幫助的情況下使用默認值(請參閱端到端Swagger 示例)。 當且僅當您通過 URL 段進行版本控制時,您可以讓 API Explorer 擴展使用默認值擴展路由模板,並使用配置刪除 API 版本參數:
services.AddVersionedApiExplorer(options => options.SubstituteApiVersionInUrl = true);
在提供的示例中, version
路由參數將被刪除,路由模板將更新為"api/v1.0/TableAzureCategory"
,我想這就是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.