自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(132)
  • 资源 (8)
  • 问答 (1)
  • 收藏
  • 关注

原创 知道泛型类定义以及T对应的Type,如何获取泛型类的Type

知道泛型类定义`G`,也知道T对应的`Type`,如何获取`G`对应的`Type`

2024-01-09 09:43:53 420 1

原创 Nancy2.0引入Swagger并设置其为嵌入的资源

简单记录Nancy中引入Swagger时,如何将swagger-ui作为嵌入的资源

2023-09-05 14:54:07 293

原创 C#获取windows下用于标志当前电脑的唯一性编号

最近做的项目,有个需求需要软件注册激活后才能使用,激活这种事情么,从来没做过,网上找找大多数说法都是绑定PC机器的物理硬件,但找了一圈没找到现成的C#代码获取相关硬件ID的文章,后来想了下,既然都是cmd指令,那我C#里面直接调用cmd执行指令不就行了,于是就有了下面的代码。...

2022-06-24 14:51:09 4376 3

原创 工业设备自动化平台的一些杂想

今天是愚人节,浦西开始正式封闭!所有人都被关在家里足不出户,等待着不知道何时开始的核酸检测。一时间也不知道能做些啥,闲的发慌,总得找点事情做做,翻了会CLR的书,又背了会单词,总感觉心不静,回想起之前被人问过的工业设备自动化平台的问题,突然有些思路。对于工控机个人不甚了解,但市面上大体应当都是windows,因为要与设备进行交互,理论上BS架构应当不是很适合,又因为需要包含可视化界面,所以可行的平台部署方案可能就是CS架构的winform或者wpf程序。作为某些设备的生产方,可能需要跟其它设备/生产方结

2022-04-01 15:28:23 763

原创 .Net core基于xUnit的单元测试查看测试覆盖率

写代码如何保证代码质量,基本大家都知道要做单元测试,那如何知道你单元测试是不是测试到了所有代码场景呢,这就要通过测试覆盖率来体现了。测试覆盖率,一般来说主要是Line代码行数覆盖率,同样还会有Branch分支覆盖率,Method方法覆盖率等,主要是各自的侧重点不同,但只要Line的覆盖率是100%,其它几项的覆盖率也必定是100%。如何创建单元测试,这里就一带而过,就是新建项目,筛选测试,然后按自己喜好选择一个测试框架,这里就选了xUnit具体单元测试怎么写,这里就不说了,只说下如何查看你的代码测试

2022-03-10 11:23:20 1565

原创 .Net项目github接入sonarcloud

代码质量方面的检测工具,在这之前从来没用过,就算前阵子听说了sonarcloud,也仅当知道记录了下,结果昨天被某些事情刺激了下,于是去查了下资料,然后就顺便在github上做了下测试,这里做个记录。sonarcloud的官网地址是https://sonarcloud.io,打开后点击Log in,在打开的界面中选择With GitHub进行登录授权后,按界面一路点击下去,在导入完账号组织信息后,就可以选择你要对哪些项目做QA,如果不花钱只能选择开源项目,选完后就会出来配置以下界面然后你就可以点击

2022-03-04 15:00:09 7172

原创 【微信公众号】JS-SDK页面打开提示realAuthUrl错误

测试环境好好地功能,上了生产,莫名其妙报错,开始以为是没有设置Js安全接口域名,结果让相应人员一查,已经设置了相应的域名,再看下公众号内的接口权限部分,相关js权限也都是已授权,没办法,只能按照微信文档上的常见错误及解决方法,设置debug: true,然后测试出现如下错误提示:网上按realAuthUrl搜了下,居然没搜到任何这方面的内容,奇了怪了,然后再按invalid signature搜索,这次搜到的内容就比较多了,但所有的内容都在描述一件事情:这东西只能猜!!既然只能猜,而且后端有没有对签名

2022-02-17 16:34:39 10648 2

原创 【面试题】类似国际象棋的棋子移动实现

面试题目:大致是实现一个8*8的国际象棋棋盘,实现3个棋子在上面随机移动,移动时会有一些限制行为,内容包括C#代码实现以及UnitTest

2022-01-26 16:40:03 2257 11

原创 生成一个有时效性的二维码字符串

这里所谓的时效性二维码,其实指的是扫码出来的字符串,在验证时会进行时效性以及真实性验证,原理呢参考了网上通用的HMAC签名认证机制,如果已经过了有效期,就不能进行下一步的业务操作,当然二维码的业务时效性也不一定需要通过本文的方式实现,但简单来讲,本文的方式应该是通用性比较广的一种方式。

2021-12-16 14:34:34 2235 1

原创 记录一次生产环境Net Core应用内存暴涨导致OOM的排查过程

事情起源于某个周五,刚开始是突然发现生产服务不能访问,请求时居然直接提示服务器拒绝响应,然后连用于管理生产环境的Portainer虽然能打开,但登录右上角直接出红色告警信息无法接收服务器信息,进去后所有的node都不显示!生产环境跑了二年多了,还是第一次出现这种异常情况,既然一头雾水不知道啥情况,那IT维护的绝活重启大法必须得用起来啊,麻溜的sudo systemctl restart docker命令一出,整个docker重启完毕后,世界立刻恢复如常。相安无事的度过了完美的周末,周一过来,屁股刚坐下,就

2021-12-12 01:13:45 4010 4

原创 一维数组寻找两个数字之和为N的组合

问题是这样的,一维数组,包含不重复的数字,求两个数相加之和为N的所有组合。下面分别通过以下方式获取组合:笛卡尔乘积方式、遍历HashSet方式、传统的两层循环方式、遍历Dictionary方式、排序后双指针方式

2021-10-09 15:04:45 626 1

原创 .Net Core下简单的JWT黑名单中间件

自从JWT认证方式在互联网上蔓延后,Session认证方式就被挤掉了一大半的生存空间,这里我们不讲JWT与Session两种方式的优缺点,我们只讲如何通过JWT的黑名单来阻止某些Token的登录。设置黑名单,也就是说要将Token写入某个存储介质,然后考虑数据并不需要一直存在,其在有效期之后应自动释放,那这种情况下存储介质首选肯定是缓存,鉴于目前流行容器化技术,微服务概念又漫天飞的情况,缓存还得考虑支持分布式,那妥妥的必选方案就是IDistributedCache,这样究竟是单体应用MemoryCache

2021-08-12 10:53:49 910 1

原创 .Net Core中AuthorizationHandlerContext如何获取当前请求的相关信息

在.Net Core中要自定义用户身份认证,需要实现IAuthorizationHandler,实现的代码也比较简单,一般我们只要实现本地认证AuthorizationHandler<T>.HandleRequirementAsync即可,认证时一般需要用到一些用于判断是否允许访问的认证信息,比如当前的用户信息,比如当前请求的资源信息,这些信息呢,我们都可以通过AuthorizationHandlerContext来获取。AuthorizationHandlerContext.Resource

2021-07-29 10:00:01 4300 6

原创 Asp.Net Core默认注入方式下多接口实现如何注入以及如何指定构造函数注入

多接口实现注入一般情况下,我们只需要注入定义的接口以及相应的实现,最多也就是某个接口会有多个实现,也就是多态,但因为C#是允许实现多接口,也就是某个类实现了多个接口定义,那这种情况下,又该如何注入呢?假设我们分别有接口IMutiInterface01和IMutiInterface02,每个接口都各自包含获取一个Id值的方法,以及他们的实现类MultiInterfaceImplt,该类的两个实现均返回同一个Guid,为了方便直观,这里没有把两个接口的方法设定为相同的名称,感兴趣的同学也可以将两个接口约定改

2021-07-05 18:27:57 2440

原创 利用GitLab对代码的Merge进行事前管理

作为开发,CodeReview是一个绕不过去的事情,但每次问到如何做CodeReview这个事情,答案大同小异:“抽时间对主要代码进行检查”、“组织会议大家一起检查”等等,但这些Review真的是有效Review吗?个人对这个答案是否定的,CodeReview是什么意思?是代码审查,都已经合并到主分支了,这还叫代码审查吗?这叫白盒测试,是大家一起来找茬!!CodeReview的作用应该是阻止有问题的代码合并进入主分支,所以最重要的点是这件事情要做在合并前,做到预防!那用GitLab如何做到事前预防呢?其实

2021-06-22 20:16:14 5738 5

原创 记录一次Nginx转发请求给Ocelot网关响应500错误排查

先说明下我们的Http请求流转及系统部署方式:当Http请求发起时,会先到达Nginx,然后Nignx会将请求转发至Ocelot网关服务,Ocelot网关服务会再将请求转发给下游真实提供API服务的应用,我们的应用是基于Net Core 3.1,服务提供方式也是默认的Kestrel,然后所有的服务均部署在Linux环境的Docker容器中,容器的管理工具为Portainer。产生500错误的是一个新的API接口,在这个接口之前,系统已经运行了一年多,从没产生过类似的问题,这个500还不是必定产生,多次请求

2021-05-08 20:19:12 2182 1

原创 苹果ipa包发布在IIS环境记录

项目以前IOS打包都是发布到了蒲公英上,不过最近蒲公英突然升级,之前的发布记录全都没了不说,再次上传居然没有公开选项了,也就是说用户每次下载安装都需要输入一个预设密码,最奇葩的是你连接中包含了密码也没用,打开连接时没密码,点安装却提示你要输入密码,真是我勒个去……IOS开发提出实在不行可以打ipa包,并给我发了一个部署方式链接,乖乖,原来IOS也可以像安卓那样打个独立包的,涨知识了,只是不像ap...

2019-11-18 13:40:12 554

原创 已有MVC项目(非Net Core)如何快速接入Cas单点登录

CAS是一个企业级的开源项目,其github地址为:https://github.com/apereo/cas,其Net客户端的git地址为:https://github.com/apereo/dotnet-cas-client,因为本篇内容的目标是已有系统快速接入CAS,所以CAS服务端的部署等不在本篇内容范围内。首先需要说明的是,CAS的Net客户端目前并不支持Net Core,但看项目Is...

2019-10-28 16:34:15 1859

原创 如何通过增值税(区块链)发票上的二维码获取发票要素信息

在我们收到的增值税电子发票、普票、专票,包括现在深圳专有的区块链发票上,在其左上侧空白位置都会有一个二维码,通过这个二维码呢,我们可以获取到发票关键的几样要素信息:发票代码、发票号码、开票日期、金额、不含税金额、校验码、销售方纳税人识别号,其中校验码为增值税普通发票和增值税电子普通发票专有,销售方纳税人识别号是深圳电子普通发票专有。PS:增值税普通发票(卷票)的二维码只包含发票代码、发票号码,不...

2019-08-06 20:14:46 12173 9

原创 Windows7下安装docker记录

docker火了也那么好几年了,偶才开始学习docker,说来真是落后主潮流太久。不过落后有落后的好处,因为大多数的坑都已经有人填过,所以遇见问题解决问题那也是相当的迅速,但就算是相当的迅速,这windows7下安装docker,也花了我大约3个小时的时间。因为我碰到的坑,居然没能在一篇博客里有全部的记录!首先,在安装前,最最重要的,你的电脑必须支持VA-X/AMD-V,一般来说主流电脑都支持这...

2019-07-30 19:45:35 475

原创 记录一次SqlServer数据库阻塞死锁问题排查过程

“网站又打不开了!”下午刚睡完午觉不久,就从客户那听见这不好的消息,因为之前也出过两次同样的情况,直觉就是数据库又死锁阻塞了,但之前几次都是发布完程序没多久,所以前几次都是通过“估计是发布时有事务正在执行导致事务死锁”搪塞过去,但这次可没发布过,再用这理由搪塞,估计客户会板着脸,然后一脸“虽然我不懂技术,但我不是傻子”的表情!我们可以通过下面的sql来查看当前有哪些sql正在被阻塞中:SELE...

2019-07-25 20:19:28 2876

原创 C#下ECDsa签名、验签

因为业务需要,与第三方对接时,第三方签名方法居然采用的ECDsa,而不是更常见的RSA、MD5之类,真是不走寻常路,当然我是不会承认是我见识太少的!!!麻利的让对方提供了签名算法代码,奈何对方是java,提供的也是java版本代码,具体代码如下:/** * Project Name:trustsql_sdk * File Name:ECDSAAlgoUtil.java * Package...

2019-07-22 16:06:00 5249 5

原创 兴业银行银企直联冲账查询及网银审核退回经办

之前写过兴业银行银企直联应当如何查询手续费及退票,但事实上兴业银行还会产生冲账问题。所谓冲账,就是指支付信息错误,导致根本无法到达实际收款银行,这时候因为根本无法到达收款银行,所以也就不会有收款银行回馈的支付失败信息(也就是退票),这时候银行就会自己产生一笔负向交易流水,以便将这笔付款进行冲正。虽然看起来与退票类似,但两者其实完全不同:退票记录金额是正值,而冲账金额是负值;退票并不会退还手...

2019-06-12 20:23:01 4034

原创 基于Redis实现的验证码发送及校验方案

在我们的业务中,经常存在需要通过发送验证码、校验验证码来完成的一些业务逻辑,比如账号注册、找回密码、用户身份确认等。在该类业务中,发送验证码的方式可以有各种各样,比如最常见的手机验证,最古老的邮箱验证,到现在相对少见的微信公众号、钉钉通知等;而验证码服务端存储的方式也可以各式各样,比如存储在关系型数据库中,当然也可以如本文标题所示,存储在Redis中。既然已经预见到了各式各样的发送方式,也预见...

2019-05-23 09:31:28 5551

原创 EF6中慎用async void

其实正确的说,应该所有地方都慎用async void,应当尽可能的只在用作事件Event方法时才采用async void,其它地方应当将async Task作为返回值。项目中使用的是EF6,在测试过程中,产生了一个System.NotSupportedException异常,其内容如下A second operation started on this context before a pre...

2019-05-10 10:23:26 1088

原创 兴业银行银企直联如何判断支付结果是否成功

说实在的,写这篇博客完全是意料之外,毕竟封装SDK后,银行支付理论上讲就仅仅只是简单的调用加判断,但应用实际上生产后,居然发现支付失败会有多种原因,而不同的错误,其后续处理逻辑也不一样,所以这篇博客内容就是讲如何区分失败原因,以及后续应当如何处理。以3.4.1转账汇款指令提交为例,支付代码基本如下:(全部代码可见此处) /// <summary> //...

2019-04-29 15:38:10 2027 1

原创 兴业银行银企直联查转账手续费和退票流水(C#代码篇)

前几天写了在兴业银行的银企直联中,如何查询手续费和退票流水,但没有完整的代码展示,所以这里再完整的提供下查询相关的代码。封装代码不涉及任何外部业务,如果你也正在接入兴业银行,且使用的开发语言是NET,那么你完全可以发挥拿来主义,完全不需要你修改一行代码!首先为了在转账时将企业内部系统业务Id作为PURPOSE,我在这里定义了一个ICIBTransactionPurposeBuilder接口,该接...

2019-03-22 09:39:33 1811

原创 兴业银行银企直联如何查询转账支付后的手续费及退票流水

银企直联转账和企业通过网银转账一样,都会有手续费和退票问题,所以在实际对接中,这两个问题是不可避免,必须要处理的业务问题。对于手续费,企业通过银企直联进行转账操作时,正常来说每笔操作都会产生一笔手续费,这和企业通过网银操作时并无区别,不过一般情况下,为了吸引企业将资金留在本行,可能银行会对本行内转账进行免费,但跨行转账涉及人行及其它银行,这部分费用是不可避免的。而既然产生手续费,那对于企业来说就...

2019-03-18 14:44:33 2866

原创 兴业银行银企直联对接记录及SDK

年前因为业务需要,接触了兴业银行的银企直联,因为感兴趣,所以大致搜了下国内一些银行,发现目前银行银企直联模式新接入的用户都只有前置代理机这一途径,所以兴业银行也不例外。可在此处查看兴业银行的接口文档,该处包含了V4.0.0和V4.0.4版本两份文档。至于前置机安装以及证书之类的,此处就不提供了,如果你有接入的业务需要,兴业银行的相关工作人员会提供相关资料,如下图。一般而言,你按照《兴业银行银...

2019-02-13 17:29:38 5938 16

原创 RestSharp进行POST请求时如何直接发送byte数组或string字符串

当POST请求时,RestSharp可以非常简单的实现application/x-www-form-urlencoded、form-data等方式的请求,对于application/json其也有着比较好的支持,对于application/xml方式,如果请求实体属性与xml格式定义完全一致那也是没问题的。通常情况下,上述情况已经可以满足我们大部分的需求,但是,却可能存在这些情况Json序列...

2019-01-16 15:31:15 5589

原创 RestSharp解决Encoding乱码问题

RestSharp是一个第三方开源的Http模拟请求辅助类,其底层实现基于System.Net.HttpWebRequest,且不依赖于任何第三方控件。其github地址为:https://github.com/restsharp/RestSharp,start数可以说明该类库的知名度,当然侧面也可以证明它的确是一个比较好用的HTTP请求辅助类。一般情况下,RestSharp都工作的很好,只是当...

2019-01-07 17:33:05 4666 3

原创 ABP EF Core多数据库支持

ABP官方Demo中提供了在EF Core中如何实现多数据库支持的例子,但Demo说明文档中对于要做哪些修改没做说明,所以本文在此做下说明。首先要说明的是(我这边通过官方模板生成时输入的项目名称为TaobaoAuthorization),除了ConnectionStringName声明是在TaobaoAuthorizationConsts中外,所有修改均在TaobaoAuthorization....

2018-12-26 16:29:54 9472 3

原创 第三方系统如何与阿里商旅进行对接

经过一周半的时间,终于实现了第三方系统对接阿里商旅API,通过将审批通过的差旅申请单同步到阿里商旅,来实现员工先在企业内部系统(比如OA)进行申请,申请通过后,再通过阿里商旅来进行机票、酒店之类的预定这样一个完整的差旅申请流程,因为过程比较曲折,而且如果你打阿里商旅客服电话,对方也会回复目前已不再支持通过API同步到阿里商旅这样的方案,所以此处特做记录,方便后续有业务需求要接入阿里商旅的同学。准...

2018-11-29 20:04:57 6347 4

原创 【微信卡包发票导入】微信电子发票报销方服务端接入时遇到的那些坑

首先先附上微信电子发票报销方接口列表的官方链接,如果你是.NET开发,那么你可以通过Senparc.Weixin.MP来快速开发相应的微信电子发票功能,该功能在其16.4.0版本开始提供,16.4.9版本修复报销方的bug(修复PR代码由本人提供),16.4.10电子发票原作者又做了一些调整,重新定义了发票实体,所以电子发票部分16.4.9和16.4.10不兼容,然后目前16.4.10报销方部分已...

2018-10-31 15:43:45 12857 6

原创 通过Spire.pdf生成新版税务局监制章

因为国家税务局发文,要求将电子发票上旧的税务局监制章改为新版监制章,按我们当初电子发票的做法,此处部分是将已有的监制章png图片绘制到指定位置,但让美工按税务局行文要求制图后,生成出来的效果怎么预览都不满意,所以就产生了直接在pdf上绘制税务局监制章的想法。想法很美好,现实很骨感!平面几何知识早就忘到了不知哪个角落,什么a、b、c,什么切线,还有最难的计算弧线长度(高等数学),所以事实是知道应...

2018-09-30 10:50:17 1710 1

原创 ASP.NET Core 如何记录每次响应的Response信息

上一篇文章中我们已经成功的记录了Request部分的信息,现在我们来看下如何记录Response的内容。相比于Request,Response额外多了个StatusCode,然后内容都是通过Body读取,不过不同于Request.Body的只读,Response.Body是个只写的数据流。可以看到默认Response.Body数据流数据类型为Microsoft.AspNetCore.Serv...

2018-09-26 14:24:35 9708 1

原创 ASP.NET Core 如何记录每次请求的Request信息

在NFX中,我们可以很简单的通过DelegatingHandler来记录每次请求的Request和Response部分信息,但在ASP.NET Core中却行不通了,因为在Core中,我们无法使用Handler,只能通过Middleware中间件来捕获请求。本篇内容基于ASP.NET Core 2.1版本。在ASP.NET Core中,一般我们都会在Startup的Configure方法中...

2018-09-17 11:01:02 17588 1

原创 老司机翻车记--为什么Session会取不到值

作为一个资深的老司机,用MVC5的WebApi做了个小应用,项目前后端分离,然后需要保持用户登录信息,所以很简单的通过在Global.asax文件中增加相应代码来使WebApi支持Session public override void Init() { this.PostAuthorizeRequest += (sender, e) =&...

2018-08-31 13:56:17 6396

原创 ASP.NET Core默认注入方式下如何注入多个实现(多种方式)

在我们开发过程中,对于服务来说,一般我们定义interface实现均只存在一个具体实现(有人戏称这种情况为十代单传模式),这时候Core默认的注入方式已经支持我们的需求,但对于某些抽象定义实现来讲,我们可能会有多种具体实现,在项目中,我们可能会按照具体需求选用不同的实现。首先先具体下我们的业务场景例子,假设我们有以下interface及它的两个具体实现 public interfac...

2018-07-30 11:52:44 10616 1

翻译 【翻译】在.NET下如何预防XXE注入攻击

接下来关于.NET中XXE注入的内容来自Dean Fleming单元测试的Web站点:https://github.com/deanf1/dotnet-security-unit-tests。该站点覆盖了目前.NET下支持的所有XML解析器,且测试用例均展示了哪些情况下它们对于XXE注入而言是安全的,哪些情况下又是不安全的。这些内容更早之前是基于James Jardine这篇关于.NET XXE的...

2018-07-06 10:09:05 2775

ZookeeperRecipesElectionDemo

简单的zookeeper选举实现demo

2017-03-13

芝麻信用sdk移动端接入pdf文档

芝麻信用sdk移动端接入pdf文档

2016-12-06

动态加载的图片LazyLoad

用于显示动态加载的图片如何通过JQuery.LazyLoad控件实现延迟加载,可惜目前例子在谷歌浏览器下还有些问题

2015-10-20

WebAPIFileDemo

对应于相应博客的源代码,运行Demo时请先调试服务端,然后开启客户端,如果缺少HttpClient对应的dll,请通过NuGet下载

2015-04-30

拼图小游戏Demo

拼图小游戏的源代码,包含两种方式,适用于对应博客

2015-04-03

特殊日期配置小工具

对应博客的源代码,需要注意调整app.config中的相关配置为你实际希望的xml位置

2015-03-02

SecuritySignTools

修正之前的版本,增加访问非签名方式的WebAPI,删除不必要的dll

2015-02-13

SecuritySignTool

WebAPI防篡改的测试小工具,仅针对相应博客

2015-02-06

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除