随笔分类 - .NET
摘要:@[toc] 软件系统中数据库或者持久层的基本操作功能可以用Curd描述,Curd即 增加(Create)、更新(Update)、读取查询(Retrieve)和删除(Delete), 这4个单词的首字母。 在常见的业务系统中,对数据的大部分操作都是Curd,在实践的过程中对数据的筛选、排序、分页、关
阅读全文
摘要:@[toc] Volo.Abp的[身份服务器模块](https://docs.abp.io/zh-Hans/abp/latest/Modules/IdentityServer)默认使用 [IdentityServer4](https://identityserver4.readthedocs.io/
阅读全文
摘要:@[toc] 假设有一个按照[官方sample](https://docs.abp.io/zh-Hans/abp/latest/Samples/Microservice-Demo)搭建的微服务项目,并安装好了abp-cli。 需要创建一个名为GDMK.CAH.Common的模块,并在模块中创建标签管
阅读全文
摘要:今天下午在排查一个EF问题时,遇到了个很隐蔽的坑,特此记录。 问题 使用ef执行Insert对象到某表时报错,此对象的Address为空: 不能将值 NULL 插入列 'Address',表 'dbo.xxx';列不允许有 Null 值。INSERT 失败。 检查数据库和迁移文件时发现Address
阅读全文
摘要:本文将从GB/T 22239《信息安全技术 网络安全等级保护基本要求》规定的安全计算环境中解读、摘要若干安全要求,结合Abp框架,对站点进行安全升级。 【身份鉴别】应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。 解决方案 设置密码最小长度 密码由数字、字
阅读全文
摘要:漏洞说明: 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Web脚本代码(html、javascript、css等),当用户浏览该页面时,
阅读全文
摘要:@ 用户找回密码,确切地说是重置密码,为了保证用户账号安全,原始密码将不再以明文的方式找回,而是通过短信或者邮件的方式发送一个随机的重置校验码(带校验码的页面连接),用户点击该链接,跳转到重置密码页面,输入新的密码。这个重置校验码是一次性的,用户重置密码后立即失效。 用户找回密码是在用户没有登录时进
阅读全文
摘要:@ 免登录验证是用户在首次两步验证通过后,在常用的设备(浏览器)中,在一定时间内不需要再次输入验证码直接登录。 常见的网页上提示“7天免登录验证”或“信任此设备,7天内无需两步验证”等内容。 这样可以提高用户的体验。但同时也会带来一定的安全风险,因此需要用户自己决定是否开启。 原理 常用的实现方式是
阅读全文
摘要:@目录原理用户验证码校验模块双因素认证模块改写登录项目地址 在之前的博文 用Abp实现短信验证码免密登录(一):短信校验模块 一文中,我们实现了用户验证码校验模块,今天来拓展这个模块,使Abp用户系统支持双因素认证(Two-Factor Authentication)功能。 两步验证,又称双重验证或
阅读全文
摘要:假设有User表 public class User : Entity<int> { public int Id { get; set; } public string UserName { get; set; } public string Name { get; set; } public st
阅读全文
摘要:@ 现象 默认地,Abp的语言提供程序将返回的CultureInfo为En,在一些默认实现的接口(比如/api/TokenAuth/Authenticate)返回的错误信息是英文 目标是改成简体中文显示,但是即便我们在AbpSettings表中加入了DefaultLanguage为"zh-Hans"
阅读全文
摘要:@ Volo.Abp 配置应用层自动生成Controller,增删查改服务(CrudAppService)将会以RESTful Api的方式生成对应的接口 (官方文档),这与旧版本的Abp区别很大。RESTful固然好,虽然项目里新的Api会逐步使用RESTful Api代替旧的,但在前后端分离的项
阅读全文
摘要:本周在做接口动态传参的时候思考了个问题:如何把一个json字符串,转成C#动态类? 比如由 { 'userId': 100, 'id': 1, 'title': 'hello world', 'completed': false } 生成 dynamic obj = new { userId = 1
阅读全文
摘要:@ 前言 今天我们来聊一聊一个Paas的方案,如何集成到一个既有的项目中。 以其中一个需求为例子:在产品项目中,加入IM(即时通信)功能,开始徒手撸代码,会发现工作量很大,去github找开源项目,结果也可能事与愿违:功能不够强大,或者用不同的语言编写的,编译出来程序集无法集成到项目中。 可能当下最
阅读全文
摘要:UI设计的本质是对于产品的理解在界面中多种形式的映射,当需求和定位不同时,对相同的功能表达出了不同的界面和交互方式。作为播放器,界面可以是千差万别的。《番茄播放器》的iOS平台上我开发了传统版本,和基于手势播放的版本。它们界面不同,但用的同一个播放内核。作为播放内核项目,在MatoMusic.Core的工作已经结束。本系列博文重点还是在播放器思路的解读,关于MAUI动画交互,我打算有时间另外写博客(这里给自己挖个坑)。 本项目中朴实无华的播放器界面部分,我想仅作为辅佐播放内核的示例,对于页面和控件的Xaml部分不会展开描述。
阅读全文
摘要:曲目排序,原理是通过交换位置实现的,iOS和Android平台都有自己的可排序列表控件,在对选中的条目进行排序(往往是提起条目-拖拽-释放)的过程中,触发事件往往提供当前条目。在传统播放器随机播放时,如果下一曲不是我想听的,我仍然想听上一曲,由于上一曲按钮是随机触发的时机
阅读全文
摘要:为什么想起来这个项目了呢?这是一个Windows Phone 8的老项目,2014年用作为兴趣写了个叫“番茄播放器”的App,顺便提高编程技能。这个项目的架构历经多次迁移,从WP8到UWP再到Xamarin.Forms。去年底随着MAUI的正式发布,又尝试把它迁移到MAUI上来。
阅读全文
摘要:RocketChat 适用于AbpBoilerplate的RocketChat Api库 Rocket.Chat 是一个免费、开源、可扩展、高度可定制且安全的平台,可让您与团队进行交流和协作、共享文件和实时聊天(https://www.rocket.chat/) Rocket.Chat服务的安装请阅
阅读全文
摘要:前端代码的框架采用vue.js + elementUI 这套较为简单的方式实现,以及typescript语法更方便阅读。 首先来编写发送验证码函数, 登录,绑定,解绑的业务都需要发送验证码功能,通过currentVerifyingType 来区别当前验证码种类。也就是在服务端的Purpose目的。
阅读全文
摘要:接下来我们重写原Abp的部分实现,来驳接手机号相关业务。 改造User类 重写PhoneNumber使得电话号码为必填项,和中国大陆手机号11位长度 public new const int MaxPhoneNumberLength = 11; [Required] [StringLength(Ma
阅读全文