.NET Core

[Hei.Captcha] Asp.Net Core 跨平台验证码实现

六月ゝ 毕业季﹏ 提交于 2020-10-24 07:55:31
写在前面 说起来比较丢脸。我们有个手机的验证码发送逻辑需要使用验证码,这块本来项目里面就有验证码绘制逻辑,.Net Framework的,使用的包是 System.Drawing ,我把这验证码绘制逻辑复制到.Net Core的新项目引用对比包 System.Drawing.Common ,windows下面验证码正常,CentOs下面死活不能正常,像这样: (左边为CentOs运行结果,右为Windows) 依赖库检查安装; 字体检查安装; 逻辑检查; 折腾了一天多放弃了,决定重新写。 我看了市面上的各种验证码,使用第三方的,免费的都有很多限制,并随时有可能开始收费(用户量上去后就收费,俗称“养猪”); 有些比较大平台的已经开始收费或者即将收费(无可厚非,不点名); 视野有限,没有都一一了解到,如果有免费的,限制又比较少的,使用体验不错的第三方验证码,欢迎留言~~ 综上,我决定自己绘制 选择图片绘制库 GitHub上面我看到比较多星的是: SixLabors / ImageSharp dlemstra / Magick.NET mono / SkiaSharp 综合考虑后选择了:ImageSharp 官方文档:https://sixlabors.github.io/docs/ 成果 Hei.Captcha 一个.net core,跨平台的验证码生成工具包,基于ImageSharp

ASP.NET Core3.1使用Identity Server4建立Authorization Server-1

拟墨画扇 提交于 2020-10-23 18:39:20
前言 网上关于Identity Server4的资料有挺多的,之前是一直看杨旭老师的,最近项目中有使用到,在使用.NET Core3.1的时候有一些不同。所以在此记录一下。 预备知识: https://www.cnblogs.com/cgzl/p/9405796.html 本文内容参考 杨旭老师之前博客: https://www.cnblogs.com/cgzl/p/7780559.html 官方文档: https://identityserver4.readthedocs.io/en/latest/ 如杨旭老师所说,官方文档真的很详细,有时间建议大家看下官方文档。 建立Authorization Server 建立ASP.Net Core项目使用空模板。 项目建立之后,运行方式改为使用控制台运行而不是IIS Express,以便查看各种debug信息。 这个已成为习惯,也是学习杨老师的,确实比较方便,当然如果不喜欢可以不设置,只需要端口号配置的时候对应好就可以的。 修改后文件代码为: { "profiles": { "IdentityServer4.AuthServer": { "commandName": "Project", "launchBrowser": true, "applicationUrl": "http://localhost:5000",

(一)学习了解OrchardCore笔记——开篇:基于asp.net core的OrchardCore

冷暖自知 提交于 2020-10-23 17:51:54
  想深入了解OrchadCore源码许久了,但是读源码的时候遇到很多问题而网上的参考资料太少了(几乎都是OrchadCms不带OrchardCore的),现在解决得差不多了,做下笔记方便自己查看,有错误之处也请大家帮忙指出,谢谢。   OrchardCore是一个基于asp.net core的cms(废话),其结构类似于asp.net core(为啥说类似我也不知道,asp.net core的源码我只看了一部分,似是而非吧)。因此,我将直接从asp.net core的角度来解析OrchardCore,从asp.net core的角度就是说关于asp.net core的靠自己理解,可以省略1万字。   废话结束,开始正题,源码直接github搜索OrchardCore就可以下载了,我直接用visual studio(我不用rider,首先我没钱买,其次我之前是弄.net framework不是java,我用的vs都是社区版)自带的git去clone半天(这小水管受不了后面直接码云找镜像仓库clone了)。   clone完了,第一个坑出现了,选择记得选择版本和分支,说多都是泪,OrchardCore支持的版本(从.net core 1.0到.net core 3.1都有)和自身的分支太多了,第一次接触没注意跳坑了导致各种出错(原因是我没有装对应的.net core版本,默认好像2

手把手撸套框架-放弃SqlSugar转用FreeSql

三世轮回 提交于 2020-10-23 05:34:01
目录 在之前的随笔中:  1.1: ORM的选择  1.2: SqlSugar的搭建与避坑 分别有讲过SqlSugar 和 FreeSql,我最后选用了Sqlsugar,今天又写一遍,放弃SqlSugar 转用FreeSql。 起始,说起来有点啪啪打脸的意思, 但其实不是。 写第一篇 ORM的选择的时候 大约是两个月前,只是最近发到博客园。 当时的情况就是,急需一个ORM框架快速上手做开发,现在两个月过去了。我到新公司开发的第一个项目,也结束了。 虽然不算深度使用SqlSugar,但是 也算是 熟悉了。 确实对于新手刚入坑的来说,sqlsugar是最简单,容易上手的,但是用一段时间就会发现了 sqlsugar的短板还是比较明显。 第一,编写风格。 尤其是在连表查询的时候,sqlsugar 的风格老是感觉怪怪的: 对比,FreeSql 则用起来 舒爽很多: 第二: 稳定性 这里,Freesql 目前不算深度使用,但是写过一两个demo,感觉还是很不错。 但是Sqlsugar 在之前项目的使用中 有遇到过,Update 数据失败的问题,使用的是Oracle 数据库,用的是SimpleClient ,不是每张表都失败,有的表修改能成功。 这里我没有去详细排查 究竟是以为哪个字段有问题还是这么,后来为了避免这种问题,全部使用的 SqlSugarClient,同样的表

手把手撸套框架-ORM框架的选择

你说的曾经没有我的故事 提交于 2020-10-23 02:27:55
目录 一,为什么选择SqlSugar? 在.net core ORM框架中,能选择的方案其实有很多,包括以下方案: 1,EF-Core 2,Dapper 3,FreeSql 4,SqlSugar 为什么最后选择了Sqlsugar 呢? 一个个来说, 首先是: EF-core 。 EF-core 一开始想法也是担心性能问题,大概在7年前 有尝试过一次EF,深深被EF的性能所折服 实在是太慢了,当然做一些小型项目,EF当然是体现不出性能差距的,但是谁又知道自己的“小项目”哪天不会随着 业务的发展变成“大项目” 呢? 所以,一开始对EF 以及EF-Core 没有好感,不过后来看了,EF-Core的官网介绍, 感观上发生了很大的变化, 总的来说就是: EF 和 EF-Core 完全是两个东西。 更准确的说是:.net Core 和 .net Famework 完全是两个东西。 这么说吧, .net Core在性能上完全不怂 java,go,python,php 任何一种语言,再说.net 性能不好的,可以啪啪打脸了。 但是,我还是首先淘汰了,EF-Core。原因是,查百度各种ORM都拿EF-core 做性能测试,可以参考以下连接: 参考: https://www.cnblogs.com/kellynic/p/10557882.html 虽然,EF-Core 性能跟EF 不能同日而语,但是

GDB 调试 .NET 程序实录

三世轮回 提交于 2020-10-22 19:08:02
注:本文重要信息使用 *** 屏蔽关键字。 最近国庆前,项目碰到一个很麻烦的问题,这个问题让我们加班到凌晨三点。 大概背景: 客户给了一些 C语言 写的 SDK 库,这些库打包成 .so 文件,然后我们使用 C# 调用这些库,其中有一个函数是回调函数,参数是结构体,结构体的成员是函数,将 C# 的函数赋值给委托,然后存储到这个委托中。 C# 调用 C 语言的函数,然后 C 语言执行到一些步骤后, C 语言函数调用 C# 的函数。这个在 ARM64 的机器下,是正常的,例如树莓派,华为的鲲鹏服务器等。由于突然改成使用 X64 的机器部署项目,没有测试就直接打包了(Docker)。 没有测试的原因有两个: 一是,众所周知 .NET Core 是跨平台的,既然在 ARM64 下已经测试过,那么应该没问题; 二是,项目是华为 edge IoT 项目,必须走华为云注册边缘设备,然后通过云服务下发应用(Docker)到机器才能成功运行(有许多系统自动创建的环境变量和设备连接华为 IoT 的凭证)。在机器上直接启动,是无法正常完成整个流程的。 三是,事情来得太突然,没有时间测试。 事实上,就是这么幸福,出事的时候就是加班福报~~~ 大家记得,要部署上线、演示项目之前,一定要测试,测试再测试。 出现问题 应用在云上下发到设备后,启动一会儿就会挂了,然后修改 Docker 容器的启动脚本,进入容器后

Vs Code推荐安装插件

时光毁灭记忆、已成空白 提交于 2020-10-22 03:06:26
前言:   Visual Studio Code是一个轻量级但功能强大的源代码编辑器,轻量级指的是下载下来的Vs Code其实就是一个简单的编辑器,强大指的是支持多种语言的环境插件拓展,也正是因为这种支持插件式安装环境开发让Vs Code成为了开发语言中的霸主,让同时支持开发多种语言成为了可能。俗话说的好工欲善其事必先利其器,作为一个Vs Code老用户而已我我觉得安装一些有用的插件多自己日常的开发效率能够大大的提升,下面我推荐的是我日常开发中使用的比较多和感觉起来还不错的一些插件,同时会持续更新,假如大家觉得有好的插件而我这里没有提到的可以在下面留言我会补上。 Vs Code相关链接地址: Vs Code 官网地址: https://code.visualstudio.com/ Vs Code GitHub源码地址: https://github.com/Microsoft/vscode Vs Code 插件市场地址: https://marketplace.visualstudio.com/ Vs Code拓展插件安装: 快捷键:Ctrl+Shift+X进入拓展面板,到应用商店文本框中搜索拓展。 适用于 VS Code 的中文(简体)语言包: 拓展名称:Chinese (Simplified) Language Pack for Visual Studio Code

拥抱.NET Core系列:MemoryCache 初识

ぐ巨炮叔叔 提交于 2020-10-21 22:24:19
原文: 拥抱.NET Core系列:MemoryCache 初识 阅读目录 MSCache能做什么? 从IMemoryCache说起 开发者的体验 写在最后 Cache是一个绝大多数项目会用到的一个技术,说起到缓存可能就联想到 Set、Add、Get、Remove、Clear 这几个方法。那么在.NET Core中微软给我们带来了什么样的缓存体验呢?今天我们就来介绍下”Microsoft.Extensions.Caching.Memory”。 由于这个包名称过长,下文使用MSCache来代替。 回到目录 MSCache能做什么? 绝对过期支持 滑动过期支持(指定一个时间,TimeSpan,指定时间内有被Get缓存时间则顺延,否则过期) 过期回调 自定义过期 MSCache目前最新的正式版是 2.0.0,预览版是2.1.0,会与.NETCore 2.1一起发布。本篇用了2.0.0版本 开源在GitHub上,仓库地址是: https://github.com/aspnet/Caching NuGet地址为: https://www.nuget.org/packages/Microsoft.Extensions.Caching.Memory/2.0.0 回到目录 从IMemoryCache说起 IMemoryCache 就提供了三个方法并实现了 IDisposable 接口。 很好理解

.NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑

对着背影说爱祢 提交于 2020-10-21 21:47:35
一般来说,大家在需要监听全局消息的时候会考虑 SetWindowsHookEx 这个 API。或者需要处理一些非自己编写的窗口的消息循环的时候,也会考虑使用它。 如果要知道如何使用这个 API,你可以在网上搜到大量这样的文章/博客/教程/文档,然而大多不会提及使用此 API 时遇到的一些坑。阅读本文,你当然也可以知道应该如何使用这个 API,但同时也能了解如何正确使用以避免一些奇怪的问题。 @ TOC 基本使用 简单一点,先贴出一部分可以工作起来的代码,你直接可以放到你的项目当中运行测试: public partial class MainWindow : Window { private readonly HookProc _mouseHook; private IntPtr _hMouseHook; public MainWindow() { InitializeComponent(); _mouseHook = OnMouseHook; Loaded += OnLoaded; } private void OnLoaded(object sender, RoutedEventArgs e) { var hModule = GetModuleHandle(null); // 你可能会在网上搜索到下面注释掉的这种代码,但实际上已经过时了。 // 下面代码在 .NET Core 3

跟我一起学.NetCore之熟悉的接口权限验证不能少(Jwt)

百般思念 提交于 2020-10-21 21:15:04
前言 权限管控对于一个系统来说是非常重要的,最熟悉不过的是菜单权限和数据权限,上一节通过Jwt实现了认证,接下来用它实现接口权限的验证,为什么不是菜单权限呢?对于前后端分离而言,称其为接口权限感觉比较符合场景(我是这么理解的);数据权限牵涉到具体业务,这里就不说啦! 正文 对于一些比较简单的系统,访问角色可能只有固定的几种,比如一些产品管理系统,通常只有管理员、维护员、用户三种权限,管理员拥有整个系统的权限,维护员只能访问产品维护相关页面和操作,用户只能访问产品的一些信息,如果类似这种情况,可以直接指定角色的方式进行权限管控,如下: 案例代码直接使用上一节的项目,借用上次认证那块代码(偷懒太明显~~~),如果没看上一篇的小伙伴,去瞅瞅认证那块内容( 跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt) ),随便敲敲代码,这节要用(别说我,我是有苦衷的,想让小伙伴多撸代码~~~);如果只是想熟悉知识点,也可以继续往下看的,不废话,直接开始: 注:[Authorize]加在控制器上时,该控制器下所有的接口都受保护; 为了方便测试,如上图所示,增加一个产品控制器,针对不同人员模拟了三个接口,因为接口受到保护,只能通过获取到的Token才能正常访问,这里就不截图演示了。Token调用User中的Login接口获取,详细请参考( 跟我一起学