草庐IT

API接口签名校验(C#版)

我们在提供API服务的时候,为了防止数据传输过程被篡改,通常的做法是对传输的内容进行摘要签名,把签名串同参数一起请求API,API服务接收到请求后以同样的方式生成签名串,然后进行对比,如果签名串不一致,说明数据在传递过程中被篡改了,这时API服务拒绝本次请求即可,这样我们就实现了签名校验。常见的摘要算法方式很多,如MD5、SHA、HMAC等,本文采用的是MD5+Base64的方式生成签名串,具体如下:1、MD5加密方法点击查看代码//////字符串MD5加密//////要加密的字符串///编码方式///密文publicstringMD5(stringstr,stringcharset){byt

.NET 6 实现滑动验证码(五)、验证码设置与缓存

这一节,我们在Constant目录中,定义两个类CaptchaOptions.cs与CaptchaTypeConstant。目的是设置验证码的类型与其他一些属性。然后在Storage目录中,设置验证码的缓存数据。上一节内容:.NET6实现滑动验证码(四)、扩展类目录CaptchaOptions.csCaptchaTypeConstant.csDefaultStorage.csCaptchaOptions.cs在Constant文件夹下新建立CaptchaOptions.cs。定义验证码过期时间、缓存key值、容错值等。usingSlideCaptcha.Model;usingSystem.Co

快速集成快递物流轨迹查询功能

前沿近年来,随着互联网的发展,各个行业都在用新的技术、新的观念为自己的发展打下坚实的基础,如今网络已经渗透到了人们的日常生活中,网上购物成了大家喜爱的方式。各类商城、APP、小程序等应用不断涌现,涉及各行各业,都在争抢成为人们网上购物的载体。网上购物物流是必不可少的一环,这些应用是如何解决物流信息系统化的,让消费者方便快捷的了解物品的实时轨迹信息和系统内部流程无阻碍自动流转?我认为有两种途径可达成,第一种是自建物流体系,逐个跟物流公司对接,设计符合自身的产品解决问题,这种方案的优点是灵活性非常高,高度契合公司系统,缺点也很明显,每家公司接口标准都不一样,需要懂物流的人抽象设计,接入难度大、耗时

C#实现HTTP访问类HttpHelper

在项目开发过程中,我们经常会访问第三方接口,如我们需要接入的第三方接口是WebAPI,这时候我们就需要使用HttpHelper调用远程接口了。示例中的HttpHelper类使用Log4Net记录了每次调用的请求内容和响应内容的日志,并且每条日志都带上了链路ID和标识,这样方便我们在排查问题时能快速的找到当时的请求和响应内容,进而定位分析问题。大家在使用的时候如不需要记录日志,删除掉即可。HttpHelper类代码如下:publicclassHttpHelper:IDisposable{privatebool_disposable=false;//////请求编码格式默认utf-8;///pub

API接口签名校验(C#版)

我们在提供API服务的时候,为了防止数据传输过程被篡改,通常的做法是对传输的内容进行摘要签名,把签名串同参数一起请求API,API服务接收到请求后以同样的方式生成签名串,然后进行对比,如果签名串不一致,说明数据在传递过程中被篡改了,这时API服务拒绝本次请求即可,这样我们就实现了签名校验。常见的摘要算法方式很多,如MD5、SHA、HMAC等,本文采用的是MD5+Base64的方式生成签名串,具体如下:1、MD5加密方法点击查看代码//////字符串MD5加密//////要加密的字符串///编码方式///密文publicstringMD5(stringstr,stringcharset){byt

.NetCore下基于FreeRedis实现的Redis6.0客户端缓存之缓存键条件优雅过滤

前言众所周知内存缓存(MemoryCache)数据是从内存中获取,性能表现上是最优的,但是内存缓存有一个缺点就是不支持分布式,数据在各个部署节点上各存一份,每份缓存的过期时间不一致,会导致幻读等各种问题,所以我们实现分布式缓存通常会用上Redis但如果在高并发的情况下读取Redis的缓存,会进行频繁的网络I/O,假如有一些不经常变动的热点缓存,这不就会白白浪费了带宽,并且读到数据以后可能还需要进行反序列化,还影响了CPU性能,造成资源的浪费从Redis6.0开始有一个重要特性就是支持客户端缓存(仅支持String类型),效果跟内存缓存是一样的,数据都是从内存中获取,如果服务端缓存数据发送变动,

一个例子形象的理解协程和线程的区别

一个例子形象的理解协程和线程的区别Talkischeap,showmethecode!所以,废话先不说,先上代码:首先写一个WebAPI接口//////测试接口///[RoutePrefix("api/test")]publicclassTestController:ApiController{//////测试GET请求//////测试参数[HttpGet][Route("TestGet")]publicHttpResponseMessageTestGet(stringval){Thread.Sleep(200);//模拟执行耗时操作returnnewHttpResponseMessage{C

.NetCore下基于FreeRedis实现的Redis6.0客户端缓存之缓存键条件优雅过滤

前言众所周知内存缓存(MemoryCache)数据是从内存中获取,性能表现上是最优的,但是内存缓存有一个缺点就是不支持分布式,数据在各个部署节点上各存一份,每份缓存的过期时间不一致,会导致幻读等各种问题,所以我们实现分布式缓存通常会用上Redis但如果在高并发的情况下读取Redis的缓存,会进行频繁的网络I/O,假如有一些不经常变动的热点缓存,这不就会白白浪费了带宽,并且读到数据以后可能还需要进行反序列化,还影响了CPU性能,造成资源的浪费从Redis6.0开始有一个重要特性就是支持客户端缓存(仅支持String类型),效果跟内存缓存是一样的,数据都是从内存中获取,如果服务端缓存数据发送变动,

一个例子形象的理解协程和线程的区别

一个例子形象的理解协程和线程的区别Talkischeap,showmethecode!所以,废话先不说,先上代码:首先写一个WebAPI接口//////测试接口///[RoutePrefix("api/test")]publicclassTestController:ApiController{//////测试GET请求//////测试参数[HttpGet][Route("TestGet")]publicHttpResponseMessageTestGet(stringval){Thread.Sleep(200);//模拟执行耗时操作returnnewHttpResponseMessage{C

.NetCore基于SqlSugar的工作单元—UnitOfWork

.NetCore基于SqlSugar和Aop的工作单元模式(UnitOfWork)实现UnitOfWork是什么UnitOfWork模式,即工作单元,它是一种数据访问模式。它是用来维护一个由已经被业务修改(如增加、删除和更新等)的业务对象组成的列表。它负责协调这些业务对象的持久化工作及并发问题。通过数据库事务UnitOfWork模式会记录所有对象模型修改过的信息,在提交的时候,一次性修改,并把结果同步到数据库。这个过程通常被封装在事务中。所以在采用UnitOfWork模式好处就在于能够确保数据的完整性,如果在持有一系列业务对象(同属于一个事务)的过程中出现问题,就可以将所有的修改回滚,以确保数