日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何實(shí)現(xiàn) ASP.NET Core WebApi 的版本化

本文轉(zhuǎn)載自微信公眾號(hào)「 碼農(nóng)讀書」,作者 碼農(nóng)讀書 。轉(zhuǎn)載本文請(qǐng)聯(lián)系 碼農(nóng)讀書公眾號(hào)。

為江都等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及江都網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站建設(shè)、江都網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

 Web API 的版本化可以盡量保證在相同url情況下保留一個(gè) api 的多個(gè)版本,通常一個(gè) webapi 會(huì)有多個(gè)client,這些client包括:app,web,html5,crawl 等等同構(gòu)或者異構(gòu)的平臺(tái),當(dāng) api 升級(jí)之后,往往升級(jí)前的 api 也得保留,當(dāng)維護(hù)兩個(gè)api的時(shí)候就是一個(gè)不小的挑戰(zhàn),畢竟還是存在一些 client 用戶需要訪問老的api,這時(shí)候就需要將 webapi 版本化。

安裝 Versioning 包

要想使用 webapi 的版本化功能,需要用 nuget 引用 Microsoft.AspNetCore.Mvc.Versioning 包,還可以通過 Visual Studio 2019 的 NuGet package manager 可視化界面安裝 或者 通過 NuGet package manager 命令行工具輸入以下命令:

 
 
 
 
  1. dotnet add package Microsoft.AspNetCore.Mvc.Versioning 

啟動(dòng) API 版本化

當(dāng)包成功添加到項(xiàng)目之后,接下來就可以在 Startup.ConfigureServices 中將 ApiVersioning 注入到容器中,如下代碼所示:

 
 
 
 
  1. public class Startup 
  2.     { 
  3.         public void ConfigureServices(IServiceCollection services) 
  4.         { 
  5.             services.AddControllers(); 
  6.  
  7.             services.AddApiVersioning(); 
  8.         } 
  9.     } 

在調(diào)用 AddApiVersioning() 的時(shí)候記得 using Microsoft.AspNetCore.Mvc.Versioning,除了這個(gè)默認(rèn)方法,還可以做一些全局配置,如下代碼所示:

 
 
 
 
  1. public class Startup 
  2.     { 
  3.         public void ConfigureServices(IServiceCollection services) 
  4.         { 
  5.             services.AddControllers(); 
  6.  
  7.             services.AddApiVersioning(v => 
  8.             { 
  9.                 v.ReportApiVersions = true; 
  10.                 v.AssumeDefaultVersionWhenUnspecified = true; 
  11.                 v.DefaultApiVersion = new ApiVersion(1, 0); 
  12.             }); 
  13.         } 
  14.     } 

使用 QueryString 指定版本號(hào)

先來看一下代碼,考慮如下的 api。

 
 
 
 
  1. [ApiController] 
  2.     [ApiVersion("2.0")] 
  3.     [Route("api/[controller]")] 
  4.     public class WeatherForecastController : ControllerBase 
  5.     { 
  6.         private static readonly string[] Summaries = new[] 
  7.         { 
  8.             "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" 
  9.         }; 
  10.  
  11.         [HttpGet] 
  12.         public IEnumerable Get() 
  13.         { 
  14.             var rng = new Random(); 
  15.             return Enumerable.Range(1, 5).Select(index => new WeatherForecast 
  16.             { 
  17.                 Date = DateTime.Now.AddDays(index), 
  18.                 TemperatureC = rng.Next(-20, 55), 
  19.                 Summary = Summaries[rng.Next(Summaries.Length)] 
  20.             }) 
  21.             .ToArray(); 
  22.         } 
  23.     } 

從代碼中可以看到,我在 WeatherForecastController 上標(biāo)記了該 Controller 是 v2.0 版本,接下來如何訪問呢?可以通過如下鏈接: http://localhost:61582/api/weatherforecast?api-version=2.0

看到這里,有些朋友就有疑問了,v2.0 的 Get 是有了,那 v1.0 的 Get 怎么訪問呢?實(shí)際開發(fā)中的做法是這樣的,會(huì)用兩個(gè)命名空間來表示相應(yīng)的版本號(hào),可以看如下代碼:

 
 
 
 
  1. namespace WebApplication6.Controllers.v1 
  2.     [ApiController] 
  3.     [ApiVersion("1.0")] 
  4.     [Route("api/[controller]")] 
  5.     public class WeatherForecastController : ControllerBase 
  6.     { 
  7.         private static readonly string[] Summaries = new[] 
  8.         { 
  9.             "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" 
  10.         }; 
  11.  
  12.         private readonly ILogger _logger; 
  13.  
  14.         public WeatherForecastController(ILogger logger) 
  15.         { 
  16.             _logger = logger; 
  17.         } 
  18.  
  19.         [HttpGet] 
  20.         public IEnumerable Get() 
  21.         { 
  22.             var rng = new Random(); 
  23.             return Enumerable.Range(1, 5).Select(index => new WeatherForecast 
  24.             { 
  25.                 Date = DateTime.Now.AddDays(index), 
  26.                 TemperatureC = rng.Next(-20, 55), 
  27.                 Summary = Summaries[rng.Next(Summaries.Length)] 
  28.             }) 
  29.             .ToArray(); 
  30.         } 
  31.     } 
  32.  
  33.  
  34. namespace WebApplication6.Controllers.v2 
  35.     [ApiController] 
  36.     [ApiVersion("2.0")] 
  37.     [Route("api/[controller]")] 
  38.     public class WeatherForecastController : ControllerBase 
  39.     { 
  40.         private static readonly string[] Summaries = new[] 
  41.         { 
  42.             "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" 
  43.         }; 
  44.  
  45.         private readonly ILogger _logger; 
  46.  
  47.         public WeatherForecastController(ILogger logger) 
  48.         { 
  49.             _logger = logger; 
  50.         } 
  51.  
  52.         [HttpGet] 
  53.         public IEnumerable Get() 
  54.         { 
  55.             var rng = new Random(); 
  56.             return Enumerable.Range(1, 5).Select(index => new WeatherForecast 
  57.             { 
  58.                 Date = DateTime.Now.AddDays(index), 
  59.                 TemperatureC = rng.Next(-20, 55), 
  60.                 Summary = Summaries[rng.Next(Summaries.Length)] 
  61.             }) 
  62.             .ToArray(); 
  63.         } 
  64.     } 

從上面代碼可以看到 WebApplication6.Controllers.v1 表示版本 v1.0 , WebApplication6.Controllers.v2 表示版本 v2.0,接下來依次瀏覽這兩個(gè)url。

使用 routes 指定版本號(hào)

很顯然使用 QueryString 的方式不是很優(yōu)雅也不符合 Restful 規(guī)范,接下來看一下如何通過 Route 改造,考慮下面的類,請(qǐng)注意我是如何在 route 中進(jìn)行版本化的。

 
 
 
 
  1. [ApiController] 
  2.    [ApiVersion("1.0")] 
  3.    [Route("api/v{version:apiVersion}/[controller]")] 
  4.    public class WeatherForecastController : ControllerBase 
  5.    { 
  6.        private static readonly string[] Summaries = new[] 
  7.        { 
  8.            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" 
  9.        }; 
  10.  
  11.        [HttpGet] 
  12.        public IEnumerable Get() 
  13.        { 
  14.            var rng = new Random(); 
  15.            return Enumerable.Range(1, 5).Select(index => new WeatherForecast 
  16.            { 
  17.                Date = DateTime.Now.AddDays(index), 
  18.                TemperatureC = rng.Next(-20, 55), 
  19.                Summary = Summaries[rng.Next(Summaries.Length)] 
  20.            }) 
  21.            .ToArray(); 
  22.        } 
  23.    } 

在這里,我將 [Route("api/[controller]")] 替換成了 [Route("api/v{version:apiVersion}/[controller]")],接下來將項(xiàng)目跑起來,如下圖所示:

忽略 API 版本

在 API 版本化時(shí),有些 API 可能只有一個(gè)版本的需求,這時(shí)候可以使用 ApiVersionNeutral 特性來忽視版本化,如下代碼所示:

 
 
 
 
  1. [ApiVersionNeutral] 
  2.     [Route("api/[controller]")] 
  3.     [ApiController] 
  4.     public class WeatherForecastController : ControllerBase 
  5.     { 
  6.         private static readonly string[] Summaries = new[] 
  7.         { 
  8.             "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" 
  9.         }; 
  10.  
  11.         [HttpGet] 
  12.         public IEnumerable Get() 
  13.         { 
  14.             var rng = new Random(); 
  15.             return Enumerable.Range(1, 5).Select(index => new WeatherForecast 
  16.             { 
  17.                 Date = DateTime.Now.AddDays(index), 
  18.                 TemperatureC = rng.Next(-20, 55), 
  19.                 Summary = Summaries[rng.Next(Summaries.Length)] 
  20.             }) 
  21.             .ToArray(); 
  22.         } 
  23.     } 

譯文鏈接:https://www.infoworld.com/article/3433156/advanced-versioning-in-aspnet-core-web-api.html


分享標(biāo)題:如何實(shí)現(xiàn) ASP.NET Core WebApi 的版本化
網(wǎng)站URL:http://www.5511xx.com/article/cdhopce.html