
C#
文章平均质量分 71
娃都会打酱油了
世界本来就是不公平的,怨天尤人、自怨自艾又有何用,何不努力一把。
展开
-
雪花算法Id生成【变种】
雪花算法的变种实现,除了可以指定各数据的位数外,还增加了NTP时间回拨支持原创 2025-04-12 18:51:10 · 276 阅读 · 0 评论 -
Nancy2.0引入Swagger并设置其为嵌入的资源
简单记录Nancy中引入Swagger时,如何将swagger-ui作为嵌入的资源原创 2023-09-05 14:54:07 · 472 阅读 · 0 评论 -
C#获取windows下用于标志当前电脑的唯一性编号
最近做的项目,有个需求需要软件注册激活后才能使用,激活这种事情么,从来没做过,网上找找大多数说法都是绑定PC机器的物理硬件,但找了一圈没找到现成的C#代码获取相关硬件ID的文章,后来想了下,既然都是cmd指令,那我C#里面直接调用cmd执行指令不就行了,于是就有了下面的代码。...原创 2022-06-24 14:51:09 · 5755 阅读 · 3 评论 -
【微信公众号】JS-SDK页面打开提示realAuthUrl错误
测试环境好好地功能,上了生产,莫名其妙报错,开始以为是没有设置Js安全接口域名,结果让相应人员一查,已经设置了相应的域名,再看下公众号内的接口权限部分,相关js权限也都是已授权,没办法,只能按照微信文档上的常见错误及解决方法,设置debug: true,然后测试出现如下错误提示:网上按realAuthUrl搜了下,居然没搜到任何这方面的内容,奇了怪了,然后再按invalid signature搜索,这次搜到的内容就比较多了,但所有的内容都在描述一件事情:这东西只能猜!!既然只能猜,而且后端有没有对签名原创 2022-02-17 16:34:39 · 12581 阅读 · 2 评论 -
【面试题】类似国际象棋的棋子移动实现
面试题目:大致是实现一个8*8的国际象棋棋盘,实现3个棋子在上面随机移动,移动时会有一些限制行为,内容包括C#代码实现以及UnitTest原创 2022-01-26 16:40:03 · 2703 阅读 · 11 评论 -
生成一个有时效性的二维码字符串
这里所谓的时效性二维码,其实指的是扫码出来的字符串,在验证时会进行时效性以及真实性验证,原理呢参考了网上通用的HMAC签名认证机制,如果已经过了有效期,就不能进行下一步的业务操作,当然二维码的业务时效性也不一定需要通过本文的方式实现,但简单来讲,本文的方式应该是通用性比较广的一种方式。原创 2021-12-16 14:34:34 · 2661 阅读 · 1 评论 -
一维数组寻找两个数字之和为N的组合
问题是这样的,一维数组,包含不重复的数字,求两个数相加之和为N的所有组合。下面分别通过以下方式获取组合:笛卡尔乘积方式、遍历HashSet方式、传统的两层循环方式、遍历Dictionary方式、排序后双指针方式原创 2021-10-09 15:04:45 · 734 阅读 · 1 评论 -
.Net Core下简单的JWT黑名单中间件
自从JWT认证方式在互联网上蔓延后,Session认证方式就被挤掉了一大半的生存空间,这里我们不讲JWT与Session两种方式的优缺点,我们只讲如何通过JWT的黑名单来阻止某些Token的登录。设置黑名单,也就是说要将Token写入某个存储介质,然后考虑数据并不需要一直存在,其在有效期之后应自动释放,那这种情况下存储介质首选肯定是缓存,鉴于目前流行容器化技术,微服务概念又漫天飞的情况,缓存还得考虑支持分布式,那妥妥的必选方案就是IDistributedCache,这样究竟是单体应用MemoryCache原创 2021-08-12 10:53:49 · 1165 阅读 · 1 评论 -
.Net Core中AuthorizationHandlerContext如何获取当前请求的相关信息
在.Net Core中要自定义用户身份认证,需要实现IAuthorizationHandler,实现的代码也比较简单,一般我们只要实现本地认证AuthorizationHandler<T>.HandleRequirementAsync即可,认证时一般需要用到一些用于判断是否允许访问的认证信息,比如当前的用户信息,比如当前请求的资源信息,这些信息呢,我们都可以通过AuthorizationHandlerContext来获取。AuthorizationHandlerContext.Resource原创 2021-07-29 10:00:01 · 4997 阅读 · 6 评论 -
Asp.Net Core默认注入方式下多接口实现如何注入以及如何指定构造函数注入
多接口实现注入一般情况下,我们只需要注入定义的接口以及相应的实现,最多也就是某个接口会有多个实现,也就是多态,但因为C#是允许实现多接口,也就是某个类实现了多个接口定义,那这种情况下,又该如何注入呢?假设我们分别有接口IMutiInterface01和IMutiInterface02,每个接口都各自包含获取一个Id值的方法,以及他们的实现类MultiInterfaceImplt,该类的两个实现均返回同一个Guid,为了方便直观,这里没有把两个接口的方法设定为相同的名称,感兴趣的同学也可以将两个接口约定改原创 2021-07-05 18:27:57 · 2851 阅读 · 0 评论 -
已有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 · 2494 阅读 · 1 评论 -
配置文件变更实时监控类(观察者模式)
因为经常要写各种配置文件,所以曾经写过监控文件变更的方法,后来其他地方要用到时每次都要copy不方便,于是修改了下代码,封装成一个类库,这样只要需要监控的文件都可以通过这个类库来实现监控,以下是代码Observer.cs,文件监控类,利用微软的FileSystemWatcher 实现实时监控,只监控修改/// /// 文件观察者,只监控文件内容修改,不监控其他诸如文件名称被改,原创 2011-11-18 09:19:48 · 3446 阅读 · 3 评论 -
lock对象时使用Monitor.Exit导致异常
lock (obj) { Console.WriteLine(System.DateTime.Now); //Monitor.Exit(obj); Thread.Sleep(3000); Console.WriteLine(System.原创 2011-12-12 10:22:23 · 3169 阅读 · 0 评论 -
获取指定日期在该年(月)中属于第几个星期
在论坛回答了别人的帖子,就顺便在这里记录一下,当然网上已经有很多现成的方法,但我看了下还是觉得我的最简单,呵呵/// /// 获取指定日期在该年中属于第几个星期 /// /// /// public static int GetWeeksInYear(this DateTime date)原创 2011-12-13 16:50:18 · 1512 阅读 · 0 评论 -
C#条形码生成(五)----Web下的测试
Html部分 无标题页 $(document).ready(function() { $("#barButton").click(function() { var raw = $.trim($("#rawData").val()); $("#im原创 2011-12-31 16:54:28 · 5554 阅读 · 0 评论 -
C#条形码生成(六)----GS1-128条形码
首先需要说明该部分代码虽然经过个人测试,也使用扫描枪测试,但本人不保证代码完全正确其次代码没有遵循“先预定义长度后非定长”的原则,但遵循了非预定义长度字符串后都加入FNC1分隔符最后虽然此部分代码遵循了 GBT 16986-2009 商品条码 应用标识符标准,但实际并未完全遵循,仅遵循了标识符长度和输入字母原则补充:此部分代码用到了前面的Code128Auto的生成编码代码,所以将部分原创 2012-01-10 10:53:05 · 11994 阅读 · 3 评论 -
C#条形码生成(二)----Code128抽象类
Code128抽象类,设计思路是采用模板,C#的Drawing还是不熟悉,开始用了Pen画竖条,然后出来的图扫描枪根本不认,最后参考了网上已有的条形码写法,采用SetPixel方法,目前生成的Code128码扫描枪可以正确读取,但条形码的尺寸标准还没遵循,有待改进,在编写完GS1-128部分后,会来修改此部分图片代码/// /// Code128抽象类 ///原创 2011-12-31 16:21:54 · 9836 阅读 · 2 评论 -
C#条形码生成(四)----Code128Auto
Code128Auto就是完全遵循GBT 18347-2001 128条码 上面的最小长度原则 编写的条形码/// /// Code128Auto条形码,遵循长度最小原则 /// public class Code128Auto : absCode128 { public Code128Auto(string rawData)原创 2011-12-31 16:35:16 · 11822 阅读 · 11 评论 -
C#条形码生成(一)----接口、Code128基础数据、枚举
接口,这样的接口能够应用到各种的一维,二维码 /// /// 条形码接口 /// public interface IBarCode { string RawData { get; } /// /// 条形码对应的数据 /// string Encod原创 2011-12-31 16:12:58 · 8792 阅读 · 2 评论 -
C#条形码生成(三)----简单的三种Code128实现
编写这三类条形码的时候,网上baidu来baidu去,就是没找到关于Code128A,Code128B,Code128C的明确定义,然后就按照网上通用的说法只取相应的字符集来编写了这部分代码CodeApublic class Code128A : absCode128 { /// /// Code128A条形码,只支持128字符集A(数字、大原创 2011-12-31 16:29:57 · 18894 阅读 · 3 评论 -
IRequiresSessionState和IReadOnlySessionState应用上的一些差异
在调用ashx时,如果需要应用Session,则必须继承接口IRequiresSessionState,IReadOnlySessionState,但根据字面,可以知道IRequiresSessionState可对Session进行所有操作,IReadOnlySessionState只能对Session进行只读操作假设场景:有页面Test.aspx以及一般处理程序Requires.ashx和R原创 2013-05-07 10:54:30 · 6072 阅读 · 2 评论 -
上传文件判断大小时应当注意的地方
以前写上传文件时判断文件大小都是用的类似下面的代码:if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0 && Request.Files[0].ContentLength <= maxPictureSize){}最近才知道原来这样做之后,其实IIS已经处理了所有浏览器提交过来的数据(Request.Form或原创 2013-05-09 13:36:31 · 2893 阅读 · 0 评论 -
Dapper.net 在Parameterized时对于String的扩展
虽然Dapper通过提供的DbString本身支持对于String的指定Parameterized,但这方法明显不够,当Insert时,我们更希望是把一个Poco直接传递过去,而不是来new一个匿名函数,对于string类型的属性,转化成DbString,然后一个一个的属性再写一遍,这多苦逼通过代码,可以看到有这么一段方法public static Action CreateParam原创 2013-10-21 12:30:15 · 2938 阅读 · 0 评论 -
诡异的500错误
近期升级项目,从3.5升级至4.5,原创 2014-11-19 14:48:10 · 1219 阅读 · 0 评论 -
NET中应用SQL参数化时当要注意的一些细节问题
在通过ADO.NET与SQL进行数据交互时,为了防止SQL注入,一般采用参数化的方式,而SqlParameter对应的构造函数如下// 摘要: // 初始化 System.Data.SqlClient.SqlParameter 类的新实例。 public SqlParameter(); // // 摘要:原创 2014-12-18 14:21:46 · 3570 阅读 · 1 评论 -
基于IBatisNet(MyBatis.Net)的Repository
说明什么的就不写了,直接上代码,如果不了解Repository,那就先去百度或者谷歌下……IRepository接口约束 using IBatisNet.DataAccess.Interfaces; public interface IRepository : IDao where T : class { ///原创 2015-02-04 10:07:57 · 4852 阅读 · 0 评论 -
[EntLib]微软企业库6 Data Access Application Block 扩展
虽然标题是对6的扩展,其实对于4、5同样适用,因为企业库在这几个版本中没太大变化该扩展主要针对DataAccessor,该类在创建时要传递几种接口:IParameterMapper,IRowMapper,IResultSetMapper,其中IRowMapper企业库提供了MapBuilder静态类来辅助创建相应的对应关系,但对于IParameterMapper和IResultSetMappe原创 2015-01-13 13:49:48 · 2468 阅读 · 0 评论 -
[EntLib]微软企业库6 日志 RollingFlatFileTraceListener按实际时间命名日志文件名
关于EntLib的各种构成、原理什么的网上随便找就能找到一大堆相应文章,这里就不细述此部分的相关内容在使用中,发现RollingFlatFileTraceListener记录下来的日志文件名居然与实际记录的日志Timestamp不一致,比如日志文件内记录的日志是2015-01-20 10:00的,你会发现实际该日志文件的名字为2015-01-20-10:01甚至可能更后(假定设置的RollIn原创 2015-01-20 10:26:44 · 2925 阅读 · 0 评论 -
WebAPI增加Area以支持无限层级同名Controller
微软的WebAPI默认实现逻辑默认实现中不支持同名Controller,否则在访问时会报HttpError,在网上找到了各种路由自实现,如给ASP.net Web API的Controller分类搭建MVC及WebAPI项目框架时碰到的问题集合在上述地址的帮助下,根据需求,重新编写了AreaHttpControllerSelector,路由原理与上述地址大同小异,均是通过路由匹配拼原创 2014-12-04 19:49:03 · 17645 阅读 · 4 评论 -
[EntLib]微软企业库6 基于Data Access Application Block的Repository
名字起得有点夸张了,其实就是实现基于Data Access Application Block的DAL基类和约束首先Repository部分没什么好描述的,如果有不了解的可以直接百度或者谷歌相关内容,直接上具体代码注意此部分没有写批量查询的方法(比如FindAll,这跟后面的基类设定有关) /// /// DataAccess Repository ///原创 2015-02-03 17:12:45 · 3092 阅读 · 0 评论 -
生成最大值范围内无重复值的长度为最大值的随机序列List<int>
这种方法一般的用途就是将一批要显示的数据乱序随机显示,而我当初写这个方法也是抄袭的QQ密码提问的做法 原始的写法是这样的:public static List GetRandomList(this int maxValue) { Random rd = new Random(); List list = new Li原创 2011-11-22 15:44:19 · 1770 阅读 · 0 评论 -
如何确认某日是否为工作日(休息日)
最近因为某些坏事,做了这么一个用来确认工作日的逻辑,前一阵子看到论坛上有些人也在问思路什么的,所以就在这里记录下首先需要说明:因为这个判断只基于日期,未基于小时,所以这个判断标准不支持跨日,即不支持从某一天晚上到第二天早上,也就是俗称的夜班其实判断某一天是否为工作日的逻辑非常简单:1、按常规情况判断该日期是否是工作日2、在第一步的基础上,判断该日期是否为特殊日期,所谓的特殊日期就是原创 2015-03-02 20:20:12 · 19027 阅读 · 0 评论 -
MyBatis.Net的一些记录
1、配置文件监控在MyBatis.Net的帮助文档中,有一段关于创建ISqlMap的代码,而这段代码在dll中是已经提供了的,代码如下ConfigureHandler handler = new ConfigureHandler(Configure);DomSqlMapBuilder builder = new DomSqlMapBuilder();_mapper = builder.原创 2013-11-19 17:27:08 · 2826 阅读 · 0 评论 -
WebAPI 用户认证防篡改实现HMAC(五)测试小工具 SecuritySignTool
防篡改之后,测试就无法简单的通过浏览器进行测试,所以需要做个小工具方便测试然后又因为是小工具,所以做的也不会有多完美,吐槽什么的还请轻点小工具核心就两个,一个是签名部分,这个通过前面的SecuritySignHelper,还有一个就是访问部分,这个通过HttpClient实现签名部分如何获取可以直接跳过,这里主要讲下HttpClient,这个是微软配套专门用于访问Restful标准ur原创 2015-02-06 11:41:51 · 5983 阅读 · 1 评论 -
[EntLib]微软企业库6 日志 通过CustomTraceListener实现自动分类存放日志文件
对比log4net,EntLib 的可视化配置以及完善的文档实在是占了挺大的优势,但两者在文件日志方面都存在着相同的问题,就是不能根据Category(log4net里面是logger name)自动分类存放(所有的日志都记在一个日志文件里,当查看日志时会相对比较麻烦),如果想实现分类存放,那就需要在config文件里写上一大堆的配置,作为懒人,这肯定是不能接受的,当然是写的越少越好:P在co原创 2015-01-23 10:27:22 · 3146 阅读 · 1 评论 -
通用自动分配小类库AutoAllot,专注于分配逻辑
因为项目中遇到了审核分配的需求,而且可以预见的是后面这种类似的分配需求还会出现,所以就有了这样一个小类库的产生首先先说明下需求原因:现在有审核人员,有待审核的订单,因为审核人员的奖金跟审核过的订单金额同比挂钩(即审的订单总额越多,奖金越高,也可能跟绩效挂钩),造成审核人员只抢大单,小单子长时间无人审,对外影响恶劣,为了解决这个问题,以及为后续的类似问题提供一个通用的解决方案,故而设计了这么一个原创 2014-06-03 14:54:48 · 1750 阅读 · 0 评论 -
WebAPI 用户认证防篡改实现HMAC(四)ApiController
前面写了三篇文章,都是为了这一步做准备,现在就开始进入最后的正题吧首先对于用户请求中的合作号和签名部分,定义一个专门的类来接收此部分信息(这里要注意的是,在FromUri获取时,方法里面的参数名不能起属性名一样的参数名,否则会导致类实例化,但属性却均为null的问题,这个在做demo时纠结了我1个多小时,汗一个) public class PartnerSign {原创 2015-02-05 17:11:41 · 6166 阅读 · 2 评论 -
WebAPI 用户认证防篡改实现HMAC(二)签名验证 AbsBaseAuthenticationAttribute
WebAPI的用户身份认证与MVC一样都是通过Attribute进行验证,此处定义了一个抽象基类,子类需要实现根据合作号获取合作用户信息的抽象方法AbsBaseAuthenticationAttribute using System; using System.Web; using System.Collections.Specialized; using原创 2015-02-05 10:11:34 · 11025 阅读 · 1 评论 -
WebAPI 用户认证防篡改实现HMAC(一)MD5签名获取
在开始前先说下防篡改机制的原理,如果已经接触过支付宝的可以跳过此部分防篡改,顾名思义就是防止有人恶意篡改请求数据以达到恶意攻击的目的,那要怎么才能实现这样的目的呢?其实很简单,将要请求的数据加上合作号、合作Key按规则组织成一个字符串,获取对应的MD5摘要,然后将该摘要及合作号同时作为请求的一部分一起传递(合作Key禁止传递)下面进行举例:假定需要进行签名的参数如下(以json格式举例原创 2015-02-04 16:30:33 · 27855 阅读 · 2 评论 -
WebAPI 用户认证防篡改实现HMAC(三)异常信息处理 AbsCommonExceptionFilterAttribute
每个平台都应该具备异常处理策略,此处异常处理策略只针对用户请求产生的当前线程异常,不包括异步处理时产生的未捕获异常,关于异常处理建议大家可以去看下微软企业库的 Exception Handling Application BlockAbsCommonExceptionFilterAttribute,同信息验证一样,异常也是通过Attrbute来处理 using System.Ne原创 2015-02-05 15:08:53 · 6954 阅读 · 3 评论