.NetCore WebApi通过中间件实现参数的日志打印

线上环境为了防止上下游扯皮,是有必要把接口的输入输出打印到日志中的,这样出了问题能够快速定位问题,没出问题也能直接把日志糊在对面脸上抓紧时间下班。 之前在.Net FrameWork的实现其实挺简单的,就是Global.aspx里的生命周期函数里写上就可以了,但是转到core之后,想当然的使用Filter来实现,遇到了不少问题,比如使用ActionFilter时,触发过滤器的时候,RequestB…

0评论

EasyNetQ异构异项目发布与订阅

最近因为业务架构需要,编写一个支付订单结果通知的服务,但发布方和订阅方不在同一个项目内,虽然两者的框架都是EasyNetQ,但版本差距很大,发布方是3.x,接受方是6.x,在订阅消息时遇到了一些问题,这里记录下解决方案。 首先就是市面上的所有主流消息队列框架封装的都过于完善,在发布消息和订阅消息时,会对消息的Body以外的属性,比如Header做一些额外的操作,以帮助框架完成更高级的功能,但这带来…

0评论

Serilog使用多个Logger实现多文件日志

因为一个统计业务的需求,需要将业务数据和系统日志分为两个文件进行记录,记录之后由日志收集系统收集到不同的ES的索引内,这里记录一下多Logger的配置方式。 首先必不可少的是,先安装Serilog.Expressions这个nuget包,网上查了很多资料鲜有提到需要安装这个包,导致踩了一个很深的坑,原因是更多的程序员喜欢使用代码内配置Serilog,而不是使用appsettings.json进行配…

0评论

C#异步编程捕获异常的正确方式

最近犯了个低级错误,在编写异步方法时,于内部做了throw new Exception()操作,导致上层线程直接死锁。 一般规范来讲,在await方法内部,不要主动抛出异常,这样做会让子线程意外终止,代码无法继续运行。 如果想要捕获一个async方法的异常,可以用如下方式: private async Task<bool> DoSomething() { throw new Exceptio…

0评论

VS2019附加到进程调试部署在IIS的.NetCore项目

首先先下载ASP.NET Core 模块,这个东西是为了让IIS可以跑.NetCore项目用的,安装完成后重启IIS。 然后打开你的项目,双击项目的.csproj文件,于PropertyGroup节点添加HostingModel,值为OutOfProcess,这里是为了让项目发布时,自动生成的web.config文件里指定为无托管模式。 <PropertyGroup> <Targ…

0评论

NPOI处理Excel的日期类型

今天写业务踩了个小坑,来记录一下。 需求是导入Excel表格到数据库,内容是一个日期的集合,导入时在cell内容转换为C#的Datetime类型时发生异常,查了下解决方法,废话不多说,上代码: for(int rowIndex = 0;rowIndex <= sheet.LastRowNum;rowIndex ++) { var row = sheet.GetRow(rowIndex); i…

0评论