真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何在ASP.NET中利用WebApi實(shí)現(xiàn)一個(gè)版本控制功能-創(chuàng)新互聯(lián)

本篇文章為大家展示了如何在ASP.NET中利用WebApi實(shí)現(xiàn)一個(gè)版本控制功能,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)建站于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元梁平做網(wǎng)站,已為上家服務(wù),為梁平各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

WebApi版本控制的好處

  • 有助于及時(shí)推出功能, 而不會(huì)破壞現(xiàn)有系統(tǒng),兼容性處理更友好。

  • 它還可以幫助為選定的客戶提供額外的功能。

接下來就來實(shí)現(xiàn)版本控制以及在Swagger UI中接入WebApi版本

一、WebApi版本控制實(shí)現(xiàn) 

通過Microsoft.AspNetCore.Mvc.Versioning實(shí)現(xiàn)webapi 版本控制

創(chuàng)建WebApi項(xiàng)目,添加Nuget包:Microsoft.AspNetCore.Mvc.Versioning

Install-Package Microsoft.AspNetCore.Mvc.Versioning

修改項(xiàng)目Startup文件,使用Microsoft.AspNetCore.Mvc.Versioning

public class Startup
{
  public Startup(IConfiguration configuration)
  {
    Configuration = configuration;
  }
  public IConfiguration Configuration { get; }

  // This method gets called by the runtime. Use this method to add services to the container.
  public void ConfigureServices(IServiceCollection services)
  {
    //根據(jù)需要設(shè)置,以下內(nèi)容
    services.AddApiVersioning(apiOtions =>
    {
      //返回響應(yīng)標(biāo)頭中支持的版本信息
      apiOtions.ReportApiVersions = true;
      //此選項(xiàng)將用于不提供版本的請(qǐng)求。默認(rèn)情況下, 假定的 API 版本為1.0
      apiOtions.AssumeDefaultVersionWhenUnspecified = true;
      //缺省api版本號(hào),支持時(shí)間或數(shù)字版本號(hào)
      apiOtions.DefaultApiVersion = new ApiVersion(1, 0);
      //支持MediaType、Header、QueryString 設(shè)置版本號(hào);缺省為QueryString、UrlSegment設(shè)置版本號(hào);后面會(huì)詳細(xì)說明對(duì)于作用
      apiOtions.ApiVersionReader = ApiVersionReader.Combine(
        new MediaTypeApiVersionReader("api-version"),
        new HeaderApiVersionReader("api-version"),
        new QueryStringApiVersionReader("api-version"),
        new UrlSegmentApiVersionReader());
    });
    services.AddControllers();
  }

  // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  {
    if (env.IsDevelopment())
    {
      app.UseDeveloperExceptionPage();
    }
    app.UseHttpsRedirection();

    //使用ApiVersioning
    app.UseApiVersioning();
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
      endpoints.MapControllers();
    });
  }
}

WebApi設(shè)置版本:

a)通過ApiVersion標(biāo)記指定指定控制器或方法的版本號(hào);Url參數(shù)控制版本(QueryStringApiVersionReader),如下:

namespace WebAPIVersionDemo.Controllers
{
  [ApiController]
  [Route("[controller]")]
  //Deprecated=true:表示v1即將棄用,響應(yīng)頭中返回
  [ApiVersion("1.0", Deprecated = true)]
  [ApiVersion("2.0")]public class WeatherForecastController : ControllerBase
  {
    private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};
 
    [HttpGet]
    public IEnumerable Get()
    {
      var rng = new Random();
      return Enumerable.Range(1, 5).Select(index => new WeatherForecast
      {
        Date = DateTime.Now.AddDays(index),
        TemperatureC = rng.Next(-20, 55),
        Summary = $"v1:{Summaries[rng.Next(Summaries.Length)]}"
      })
      .ToArray();
    }    
  }
}

通過參數(shù)api-version參數(shù)指定版本號(hào);調(diào)用結(jié)果:

如何在ASP.NET中利用WebApi實(shí)現(xiàn)一個(gè)版本控制功能

如何在ASP.NET中利用WebApi實(shí)現(xiàn)一個(gè)版本控制功能

b)通過Url Path Segment控制版本號(hào)(UrlSegmentApiVersionReader):為控制器添加路由方式如下,apiVersion為固定格式  

[Route("/api/v{version:apiVersion}/[controller]")]

調(diào)用方式:通過調(diào)用路徑傳入版本號(hào),如:http://localhost:5000/api/v1/weatherforecast

如何在ASP.NET中利用WebApi實(shí)現(xiàn)一個(gè)版本控制功能

c)通過Header頭控制版本號(hào):在Startup中設(shè)置(HeaderApiVersionReader、MediaTypeApiVersionReader)

apiOtions.ApiVersionReader = ApiVersionReader.Combine(
        new MediaTypeApiVersionReader("api-version"),
        new HeaderApiVersionReader("api-version"));

調(diào)用方式,在請(qǐng)求頭或中MediaType中傳遞api版本,如下:

如何在ASP.NET中利用WebApi實(shí)現(xiàn)一個(gè)版本控制功能

如何在ASP.NET中利用WebApi實(shí)現(xiàn)一個(gè)版本控制功能

其他說明:

  a)ReportApiVersions設(shè)置為true時(shí), 返回當(dāng)前支持版本號(hào)(api-supported-versions);Deprecated 參數(shù)設(shè)置為true表示已棄用,在響應(yīng)頭中也有顯示(api-deprecated-versions):

如何在ASP.NET中利用WebApi實(shí)現(xiàn)一個(gè)版本控制功能

  b)MapToApiVersion標(biāo)記:允許將單個(gè)API操作映射到任何版本(可以在v1的控制器中添加v3的方法);在上面控制器中添加以下代碼,訪問v3版本方法

[HttpGet]
[MapToApiVersion("3.0")]
public IEnumerable GetV3()
{
  //獲取版本
  string v = HttpContext.GetRequestedApiVersion().ToString();
  var rng = new Random();
  return Enumerable.Range(1, 1).Select(index => new WeatherForecast
  {
    Date = DateTime.Now.AddDays(index),
    TemperatureC = rng.Next(-20, 55),
    Summary = $"v{v}:{Summaries[rng.Next(Summaries.Length)]}"
  })
  .ToArray();
}

如何在ASP.NET中利用WebApi實(shí)現(xiàn)一個(gè)版本控制功能

 c)注意事項(xiàng):

 1、路徑中參數(shù)版本高于,其他方式設(shè)置版本

  2、多種方式傳遞版本,只能采用一種方式傳遞版本號(hào)

  3、SwaggerUI中MapToApiVersion設(shè)置版本不會(huì)單獨(dú)顯示  

二、Swagger UI中版本接入

1、添加包:Swashbuckle.AspNetCore、Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer  

//swaggerui 包
Install-Package Swashbuckle.AspNetCore
//api版本
Install-Package Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer

2、修改Startup代碼:

public class Startup
{
  /// 
  /// Api版本提者信息
  /// 
  private IApiVersionDescriptionProvider provider;

  // This method gets called by the runtime. Use this method to add services to the container.
  public void ConfigureServices(IServiceCollection services)
  {
    services.AddControllers();
     
    //根據(jù)需要設(shè)置,以下內(nèi)容
    services.AddApiVersioning(apiOtions =>
    {
      //返回響應(yīng)標(biāo)頭中支持的版本信息
      apiOtions.ReportApiVersions = true;
      //此選項(xiàng)將用于不提供版本的請(qǐng)求。默認(rèn)情況下, 假定的 API 版本為1.0
      apiOtions.AssumeDefaultVersionWhenUnspecified = true;
      //缺省api版本號(hào),支持時(shí)間或數(shù)字版本號(hào)
      apiOtions.DefaultApiVersion = new ApiVersion(1, 0);
      //支持MediaType、Header、QueryString 設(shè)置版本號(hào);缺省為QueryString設(shè)置版本號(hào)
      apiOtions.ApiVersionReader = ApiVersionReader.Combine(
          new MediaTypeApiVersionReader("api-version"),
          new HeaderApiVersionReader("api-version"),
          new QueryStringApiVersionReader("api-version"),
          new UrlSegmentApiVersionReader());
    });


    services.AddVersionedApiExplorer(option =>
    {
      option.GroupNameFormat = "接口:'v'VVV";
      option.AssumeDefaultVersionWhenUnspecified = true;
    });

    this.provider = services.BuildServiceProvider().GetRequiredService();
    services.AddSwaggerGen(options =>
    {
      foreach (var description in provider.ApiVersionDescriptions)
      {
        options.SwaggerDoc(description.GroupName,
            new Microsoft.OpenApi.Models.OpenApiInfo()
            {
              Title = $"接口 v{description.ApiVersion}",
              Version = description.ApiVersion.ToString(),
              Description = "切換版本請(qǐng)點(diǎn)右上角版本切換"
            }
        );
      }
      options.IncludeXmlComments(this.GetType().Assembly.Location.Replace(".dll", ".xml"), true);
    });

  }

  // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  {
    //……  
  
    //使用ApiVersioning
    app.UseApiVersioning();

    //啟用swaggerui,綁定api版本信息
    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
      foreach (var description in provider.ApiVersionDescriptions)
      {
        c.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
      }
    });

    //……  
  }
}

上述內(nèi)容就是如何在ASP.NET中利用WebApi實(shí)現(xiàn)一個(gè)版本控制功能,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章標(biāo)題:如何在ASP.NET中利用WebApi實(shí)現(xiàn)一個(gè)版本控制功能-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://weahome.cn/article/cdeeid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部