当前位置: 首页 > news >正文

谷歌企业网站seo/做个电商平台要多少钱

谷歌企业网站seo,做个电商平台要多少钱,电子商务网站建设的要素,北京展台设计制作作者:返回主页她微笑的脸https://www.cnblogs.com/linhuiy/p/12668535.html前言在后端Api的开发过程中,无法避免的会遇到接口迭代的过程,如何保证新老接口的共存和接口的向前的兼容呢,这时候就需要对Api进行版本的控制,那如何优雅的控制Api的版本呢?开始…

作者:返回主页她微笑的脸

https://www.cnblogs.com/linhuiy/p/12668535.html

前言

在后端Api的开发过程中,无法避免的会遇到接口迭代的过程,如何保证新老接口的共存和接口的向前的兼容呢,这时候就需要对Api进行版本的控制,那如何优雅的控制Api的版本呢?

开始

Microsoft.AspNetCore.Mvc.Versioning 是一个微软官方推出的一个用于管理Api版本的包,配置简单,功能强大。 

新建一个WebApi项目并通过命令引用包。

Install-Package Microsoft.AspNetCore.Mvc.Versioning

最新版本已经支持Core3.147f12198d78e75d48e1723391956009b.png

项目结构如下294559031684f1c1acec386080b55bc0.png

StartupConfigureServices 中增加一下配置。

services.AddApiVersioning(options =>
{
    options.ReportApiVersions = true; 
    options.AssumeDefaultVersionWhenUnspecified = true; 
    options.DefaultApiVersion = new ApiVersion(1, 0); 
});

ReportApiVersions:是否在请求头中返回受支持的版本信息。

AssumeDefaultVersionWhenUnspecified:请求没有指明版本的情况下是否使用默认的版本。

DefaultApiVersion:默认的版本号。

1.通过QueryString进行版本控制 

分别在两个不同的Controller中添加一个获取版本信息的接口

namespace version.Controllers.v1
{
    [ApiVersion("1.0")]
    [ApiController]
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        [HttpGet("version")]
        public string Version() => (HttpContext.GetRequestedApiVersion().ToString());
    }
}
namespace version.Controllers.v2
{
    [ApiVersion("2.0")]
    [ApiController]
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        [HttpGet("version")]
        public string Version() => (HttpContext.GetRequestedApiVersion().ToString());
    }
}

HttpContext.GetRequestedApiVersion().ToString() 是用于获取请求接口的版本信息

我们通过postman来请求这两个接口当我们没有给到具体请求哪个版本的时候会根据在ConfigureServices中配置的默认版本去执行。f0a67efc65f55c10452a5dc0f1f37d9e.png指定版本请求结果73625097296b2539abbd5bde5a4cc0b0.png

58fd9305f5a11cf6287dc8d64725d7a4.png

在响应头中会显示当前支持的所有的Api版本633f5f9d82135e1770132024b1fd8df2.png

2.通过URL Path进行版本控制 

一般在Api开发中不会去QueryString的方式去进行版本控制,而是使用URL路径段的方式来控制版本。

修改两个Controller中的代码如下。

namespace version.Controllers.v1
{
    [ApiVersion("1.0")]
    [ApiController]
    [Route("api/v{version:ApiVersion}/[controller]")]
    public class ValuesController : Controller
    {
        [HttpGet("version")]
        public string Version() => (HttpContext.GetRequestedApiVersion().ToString());
    }
}
namespace version.Controllers.v2
{
    [ApiVersion("2.0")]
    [ApiController]
    [Route("api/v{version:ApiVersion}/[controller]")]
    public class ValuesController : Controller
    {
        [HttpGet("version")]
        public string Version() => (HttpContext.GetRequestedApiVersion().ToString());
    }
}

通过postman进行测试c49d10d1e3bc35d85c36764b85696de4.png

714ea91ba6fe3154748a74198f7673bb.png

78159781e08745abbe0362c63882b65f.png

可以看到当我们使用指定的版本是可以正常访问的时候,但是如果我们去掉了Api版本号就会抛出404,并不能像QueryString一样调用默认的Api版本,因为URL Path的方式不允许隐式匹配设置的默认Api版本。所以必须申明所有的Api版本。且在请求Api同时必须带上Api版本号。

3.通过Media Type进行版本控制 

我们还可以使用content-type来实现版本的控制

修改ConfigureServices中的配置

services.AddApiVersioning(options =>
{
    options.ApiVersionReader = new MediaTypeApiVersionReader();
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.ApiVersionSelector = new CurrentImplementationApiVersionSelector(options);

});

CurrentImplementationApiVersionSelector 如果没有在content-type中传递Api版本好,将默认匹配最新的Api版本

分别修改两个Controller

namespace version.Controllers.v1
{
    [ApiVersion("1.0")]
    [ApiController]
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        [HttpGet("version")]
        public string Version() => (HttpContext.GetRequestedApiVersion().ToString());
    }
}
namespace version.Controllers.v2
{
    [ApiVersion("2.0")]
    [ApiController]
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        [HttpGet("version")]
        public string Version() => (HttpContext.GetRequestedApiVersion().ToString());
    }
}

使用Postman测试

b9cd9a5c6eb8797bd5ccbe11e5911672.gif

4.通过自定义Headers进行版本控制 

修改ConfigureServices中的配置

services.AddControllers();
services.AddApiVersioning(options =>
{
    options.ReportApiVersions = true;
    options.ApiVersionReader = new HeaderApiVersionReader("api_version");
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.DefaultApiVersion = new ApiVersion(1, 0);
});

api_version 是你HeadersKey的名字。

使用Postman测试 

b9cd9a5c6eb8797bd5ccbe11e5911672.gif

特性 当哪个Api版本不在更新,就需要弃用掉这个版本。当Deprecated值为true时说明该Api版本已经已经弃用,但是弃用不代表不能请求。只是会在响应头中告知次版本已经已经弃用。

namespace version.Controllers.v1
{
    [ApiVersion("1.0",Deprecated= true)]
    [ApiController]
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        [HttpGet("version")]
        public string Version() => (HttpContext.GetRequestedApiVersion().ToString());
    }
}

53b9ab7972f2cc03000b2fd7b2bcfe5d.png

项目总有一些功能是不需要版本的控制,所以我们希望它不受版本控制。可以添加[ApiVersionNeutral]特性使Api支持版本控制。

namespace version.Controllers.v1
{
    [ApiVersionNeutral]
    [ApiController]
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        [HttpGet("version")]
        public string Version() => (HttpContext.GetRequestedApiVersion().ToString());
    }
}

MapToApiVersion 可以将单个Api归类于任何版本。在一个Controller中可以存在多个版本的Api。我们可以配合Deprecated来灵活的控制我们的Api

namespace version.Controllers.v1
{
    [ApiVersion("3.0")]
    [ApiVersion("1.0",Deprecated= true)]
    [ApiController]
    [Route("api/v{version:ApiVersion}/[controller]")]
    public class ValuesController : Controller
    {
        [HttpGet("version"), MapToApiVersion("1.0")]
        public string Version() => (HttpContext.GetRequestedApiVersion().ToString());

        [HttpGet("version3"), MapToApiVersion("3.0")]
        public string Version3() => (HttpContext.GetRequestedApiVersion().ToString());
    }
}

通过postman测试一下。

5d3593341b88a2d8803efdaa5c3b0879.gif

总结

可以看到Microsoft.AspNetCore.Mvc.Versioning功能还能强大的,基本满足了大部分的需求,还有一些功能可能没有在本文中涉及到,可以去这里.翻阅。

往期推荐

卧槽,又来一个神器,微信消息防撤回!揭密ASP.NET Core Web API 最佳实践WebApiClient正式发布Core版本,这5个性能优化你知道吗?

知乎热议:28岁程序员期权过亿!这两天1600人加我好友,问我赚了多少钱?

4887fa9bf2b5e08b2dbceee46c43647d.png回复【关闭】学关闭微信朋友圈广告回复 【实战】获取20套实战源码回复 【福利】获取最新微信支付有奖励回复 【被删】学查看你哪个好友删除了你巧回复 【访客】学微信查看朋友圈访客记录回复 【卡通】学制作微信卡通头像回复 【python】学微获取全套0基础Python知识手册回复 【2019】获取2019 .NET 开发者峰会资料PPT
http://www.lbrq.cn/news/1455823.html

相关文章:

  • 做企业营销网站/绍兴seo排名收费
  • ueditor上传wordpress/seo整站排名
  • 织梦网站模板如何安装教程视频/世界羽联最新排名
  • 电商网站建设实训步骤/推广怎么做才可以赚钱
  • 自己做的网站能备案吗/掉发脱发严重是什么原因
  • wordpress怎么加关键词和描述/seo专业培训班
  • 网站关键字优化价格/bt最佳磁力搜索引擎吧
  • 二维码生成器 制作/郑州seo网站排名
  • 设计说明万能模板500字/宁波网站快速优化
  • 网络策划书一般包括哪些内容/湖南正规seo优化报价
  • 公司网站设计/企业建站都有什么网站
  • 南京网站做的好的公司/万能优化大师下载
  • 建设通网站源码/软文推广方案
  • c 企业网站开发/网站开发流程有哪几个阶段
  • 网站密码是什么情况/百度查重软件
  • 重庆做网站建设公司/深圳做seo有哪些公司
  • 游戏交易网站怎么做/营销策略怎么写
  • 做微信公众号的是哪个网站/网络营销组织的概念
  • 网站设计就业方向/网络优化的意义
  • 网站特色栏目重要性/百度推广年费多少钱
  • app和网站的关系/怎么写软文
  • 西宁网站制作费用是多少钱/网站推广策划书
  • 五合一网站定制/友链对网站seo有帮助吗
  • 全球十大摄影作品/百度爱采购优化
  • 武汉网站建设yundaow/哈尔滨网站优化
  • 北京网站制作的/深圳小程序开发公司
  • 公司名称起名大全免费/优化大师win10
  • 做网站的天津/云巅seo
  • 宁夏住房和城乡建设局网站/seo比较好的公司
  • 开源程序做网站任务/百度优化教程
  • 京东商品详情API技术文档框架及Python实现方案
  • 内联函数:提升效率的空间换时间艺术
  • ZYNQ-按键消抖
  • JavaScript 中的流程控制语句详解
  • 134页PPT华为项目管理之道PPT
  • 机器学习——决策树(DecisionTree)+ 过采样 + 交叉验证 案例:电信客户流失数据