314 API Versions 01(UrlSegmentApiVersionReader)

示例

1、准备两个版本的CitiesController.cs

删除不在需要的TestController.cs

Controllers文件夹下新建v1文件夹,将CitiesController.cs移动到v1中,弹出的对话框点击OK和Yes;

新建v2文件夹,拷贝一份CitiesController.cs,命名空间改成v2;

v2 CitiesController.cs如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using CitiesManager.WebAPI.DatabaseContext;
using CitiesManager.WebAPI.Models;

namespace CitiesManager.WebAPI.Controllers.v2
{

    public class CitiesController : CustomControllerBase
    {
        private readonly ApplicationDbContext _context;

        public CitiesController(ApplicationDbContext context)
        {
            _context = context;
        }

        // GET: api/Cities
        /// <summary>
        /// To get list of cities (including cityID nad city name) from 'cities' 
table
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        //[Produces("application/xml")]
        public async Task<ActionResult<IEnumerable<string?>>> GetCities()
        {
            var cities = await _context.Cities.OrderBy(c => c.CityName).Select(c 
=> c.CityName).ToListAsync();

            return cities;
        }
    }
}

2、启用API版本

安装NuGet包

<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.1.0" 
/>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" 
Version="5.1.0" />

Program.cs中添加AddApiVersionin()

builder.Services.AddControllers(options =>
{
    options.Filters.Add(new ProducesAttribute("application/json")); //Response 
Body
    options.Filters.Add(new ConsumesAttribute("application/json")); //Request 
Body
}).AddXmlSerializerFormatters();

builder.Services.AddApiVersioning(config => {
    config.ApiVersionReader = new UrlSegmentApiVersionReader();
});

更新CustomControllerBase.cs路由

[Route("api/v{version: apiVersion}/[controller]")]
[ApiController]
public class CustomControllerBase : ControllerBase
{

}

Controller添加ApiVersion Attribute

namespace CitiesManager.WebAPI.Controllers.v1
{
    [ApiVersion("1.0")]
    public class CitiesController : CustomControllerBase

结果

可以调用不同版本的Controller

Gitee获取源码:

https://gitee.com/huang_jianhua0101/asp.-net-core-8.git

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄健华Yeah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值