最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET 6開發(fā)TodoList應(yīng)用之實(shí)現(xiàn)API版本控制

 更新時(shí)間:2022年01月07日 08:55:56   作者:CODE4NOTHING  
API接口版本管理,對(duì)于一些規(guī)模稍大的企業(yè)應(yīng)用來說,是經(jīng)常需要關(guān)注的一大需求。本文將介紹在.NET 6開發(fā)中如何實(shí)現(xiàn)API版本控制,感興趣的可以了解一下

需求

API接口版本管理,對(duì)于一些規(guī)模稍大的企業(yè)應(yīng)用來說,是經(jīng)常需要關(guān)注的一大需求。盡管我們的示例程序TodoList很簡單,但是我們也可以通過這個(gè)應(yīng)用程序,來實(shí)踐一下如何管理API接口版本。

目標(biāo)

實(shí)現(xiàn)API接口版本管理。

原理與思路

要實(shí)現(xiàn)API版本管理,我們需要這個(gè)庫:Microsoft.AspNetCore.Mvc.Versioning。它提供了.NET Web項(xiàng)目接口的版本管理功能。

實(shí)現(xiàn)

添加Nuget Package并配置服務(wù)

向Api項(xiàng)目中添加Microsoft.AspNetCore.Mvc.Versioning包。并添加一個(gè)擴(kuò)展方法:

ApiServiceExtensions.cs

using Microsoft.AspNetCore.Mvc;

namespace TodoList.Api.Extensions;

public static class ApiServiceExtensions
{
    public static void ConfigureApiVersioning(this IServiceCollection services)
    {
        services.AddApiVersioning(options =>
        {
            // 向響應(yīng)頭中添加API版本信息
            options.ReportApiVersions = true;
            // 如果客戶端不顯式指定API版本,則使用默認(rèn)版本
            options.AssumeDefaultVersionWhenUnspecified = true;
            // 配置默認(rèn)版本為1.0
            options.DefaultApiVersion = new ApiVersion(1, 0);
        });
    }
}

在Program中調(diào)用:

Program.cs

// 省略其他...
builder.ConfigureLog();
builder.Services.ConfigureApiVersioning();

實(shí)現(xiàn)API版本控制

方法1: 添加ApiVersion屬性

我們復(fù)制一份TodoItemController到新文件TodoItemV2Controller并修改類名和構(gòu)造函數(shù),其他保持原樣。為了給Controller標(biāo)記對(duì)應(yīng)的API版本號(hào),我們分別向兩個(gè)Controller上添加屬性:

[ApiVersion("2.0")]
[Route("/todo-item")]
[ApiController]
public class TodoItemV2Controller : ControllerBase
{
    private readonly IMediator _mediator;
    // 省略其他...
}

以及

[ApiVersion("1.0")]
[Route("/todo-item")]
[ApiController]
public class TodoItemController : ControllerBase
{
    private readonly IMediator _mediator;
    // 省略其他..
}

驗(yàn)證1: 請求中不添加任何API版本相關(guān)字段

啟動(dòng)Api項(xiàng)目,執(zhí)行查詢TodoItem的請求:

請求

-** 響應(yīng)**

日志輸出:

結(jié)果返回:

以及響應(yīng)頭信息中包含的api-supported-versions

驗(yàn)證2: 請求中添加查詢字符串api-version

啟動(dòng)Api項(xiàng)目,執(zhí)行查詢TodoItem的請求:

請求

響應(yīng)

日志輸出:

結(jié)果返回(可以自己嘗試修改內(nèi)部邏輯,這里我懶了沒改實(shí)現(xiàn),不過從日志已經(jīng)能看出請求確實(shí)進(jìn)入了V2版本的Controller):

以及響應(yīng)頭信息中包含的api-supported-versions

方法2: 通過請求頭攜帶API版本信息

為了實(shí)現(xiàn)這一點(diǎn),需要在ConfigureApiVersioning中增加配置:

ApiServiceExtensions.cs

// 省略其他...
// 指定請求頭中攜帶用于指定API版本信息的字段
options.ApiVersionReader = new HeaderApiVersionReader("api-version");

驗(yàn)證3: 通過請求頭攜帶API版本信息

啟動(dòng)Api項(xiàng)目,執(zhí)行查詢TodoItem的請求:

請求

響應(yīng)日志輸出:

返回結(jié)果就不繼續(xù)貼了,以及響應(yīng)頭信息中包含的api-supported-versions

方法3: 通過URL路徑訪問對(duì)應(yīng)的版本

除了這種之外的以上幾種方法,都不需要修改接口的URI,而這種方式需要修改URI路徑。我們在兩個(gè)Controller上修改URI如下:

[ApiVersion("2.0")]
[Route("/{v:apiVersion}/todo-item")]
[ApiController]
// 省略其他...

驗(yàn)證4: 通過URI路徑選擇API版本

啟動(dòng)Api項(xiàng)目,執(zhí)行查詢TodoItem的請求:

請求

響應(yīng)日志輸出:

返回結(jié)果就不繼續(xù)貼了,以及響應(yīng)頭信息中包含的api-supported-versions

一點(diǎn)擴(kuò)展

有的時(shí)候我們需要標(biāo)記一個(gè)版本的請求為deprecated,但是還不想完全刪除這個(gè)Controller,可以用下面的方式進(jìn)行標(biāo)記,這樣返回頭中會(huì)指出這個(gè)版本的API已經(jīng)處于deprecated狀態(tài)了。

[ApiVersion("2.0", Deprecated = true)]
[Route("/{v:apiVersion}/todo-item")]
[ApiController]
// 省略其他...

或者在ConfigureApiVersioning中使用Convention進(jìn)行標(biāo)記:

// 省略其他...
// 使用Convention標(biāo)記deprecated
options.Conventions.Controller<TodoItemV2Controller>().HasDeprecatedApiVersion(new ApiVersion(2, 0));

我們再請求2.0版本的API時(shí),仍然可以獲取數(shù)據(jù),但是得到的返回頭中信息如下:

對(duì)比使用Convention方式標(biāo)記的返回頭

總結(jié)

在本文中我們使用多種方式實(shí)現(xiàn)了管理API版本的需求,可以根據(jù)具體的需要選擇一種進(jìn)行實(shí)現(xiàn)。

以上就是.NET 6開發(fā)TodoList應(yīng)用之實(shí)現(xiàn)API版本控制的詳細(xì)內(nèi)容,更多關(guān)于.NET 6實(shí)現(xiàn)API版本控制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • asp.net cookie清除的代碼

    asp.net cookie清除的代碼

    詳細(xì)寫出了asp.net下,cookies的清除代碼
    2008-11-11
  • ASP.NET?MVC使用JSAjaxFileUploader插件實(shí)現(xiàn)單文件上傳

    ASP.NET?MVC使用JSAjaxFileUploader插件實(shí)現(xiàn)單文件上傳

    這篇文章介紹了ASP.NET?MVC使用JSAjaxFileUploader插件實(shí)現(xiàn)單文件上傳的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 為Visual Studio2019添加Git組件

    為Visual Studio2019添加Git組件

    這篇文章介紹了為Visual Studio2019添加Git組件的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • ASP.NET圖片上傳實(shí)例(附源碼)

    ASP.NET圖片上傳實(shí)例(附源碼)

    這篇文章主要介紹了一個(gè)ASP.NET圖片上傳實(shí)例,文章還為大家提供了ASP.NET圖片自動(dòng)上傳和局部刷新顯示的源碼,希望大家喜歡
    2015-11-11
  • .NET?6新特性試用之Nuget包驗(yàn)證

    .NET?6新特性試用之Nuget包驗(yàn)證

    這篇文章主要介紹了.NET?6新特性試用之Nuget包驗(yàn)證,將.NET類庫打包成Nuget包,以便多個(gè)項(xiàng)目公用,下面我們就來學(xué)習(xí)西還內(nèi)容,詳細(xì)資料需要的朋友可以參考下面文章
    2022-03-03
  • ASP.NET+XML打造網(wǎng)絡(luò)硬盤原理分析

    ASP.NET+XML打造網(wǎng)絡(luò)硬盤原理分析

    文件傳送常用的三種方式:FTP、Email及網(wǎng)上鄰居,都在一定程度上實(shí)現(xiàn)了文件數(shù)據(jù)的交流,但它們都主要面向“點(diǎn)對(duì)點(diǎn)”的傳送,無法實(shí)現(xiàn)一塊空間,資源互見的應(yīng)用需求,這種基于點(diǎn)對(duì)多的共享模式需要尋求另外的傳輸途徑,網(wǎng)絡(luò)硬盤就是一種很好的解決方式
    2012-09-09
  • asp.net網(wǎng)站的404錯(cuò)誤頁面的正確設(shè)置方法

    asp.net網(wǎng)站的404錯(cuò)誤頁面的正確設(shè)置方法

    asp.net網(wǎng)站的404錯(cuò)誤頁面的正確設(shè)置方法,需要的朋友可以參考下。
    2010-05-05
  • 在 asp.net core 的中間件中返回具體的頁面的實(shí)現(xiàn)方法

    在 asp.net core 的中間件中返回具體的頁面的實(shí)現(xiàn)方法

    這篇文章主要介紹了在 asp.net core 的中間件中返回具體的頁面的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • VS 2015開發(fā)跨平臺(tái)手機(jī)應(yīng)用的配置教程

    VS 2015開發(fā)跨平臺(tái)手機(jī)應(yīng)用的配置教程

    這篇文章主要給大家介紹了關(guān)于VS 2015開發(fā)跨平臺(tái)手機(jī)應(yīng)用配置的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤之兩重要類代碼

    ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤之兩重要類代碼

    要進(jìn)行“網(wǎng)絡(luò)硬盤”功能設(shè)計(jì),首先要熟悉.NET中處理文件和文件夾的操作。File類和Directory類是其中最主要的兩個(gè)類。了解它們將對(duì)后面功能的實(shí)現(xiàn)提供很大的便利
    2012-10-10

最新評(píng)論

垫江县| 名山县| 峨眉山市| 昭通市| 成武县| 静乐县| 浦城县| 安陆市| 万荣县| 南宫市| 郑州市| 郧西县| 乌海市| 司法| 瓮安县| 陆良县| 喀喇沁旗| 安新县| 万山特区| 宁化县| 南康市| 宁化县| 凭祥市| 康平县| 恩施市| 青河县| 鲁山县| 皋兰县| 方山县| 上蔡县| 沙河市| 庄浪县| 海伦市| 南乐县| 将乐县| 青田县| 武平县| 马尔康县| 井研县| 垫江县| 若尔盖县|