簡體   English   中英

ASP.NET內核API版

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM