痕迹灬
致力于为.Net开发者提供最新的技术资讯、实用的开发教程和案例分享。我们的内容涵盖了.Net框架、C#编程、.NetCore、WPF、WinForms等方面的知识。
展开
-
基于.NetCore和ABP.VNext的项目实战七:全局异常处理并日志记录
中判断当前请求状态,当状态不是200,获取到状态码枚举的Key值用来当作错误信息返回,最后也执行。F5运行项目,调用 .../HelloWorld/Exception,查看日志文件。ABP框架已经默认为我们实现了全局的异常模块,这里我们自定义全局异常模块,先在。配置log4net,然后我们直接返回IHostBuilder对象,便于在。出现异常,也要能够记录日志,这里采用。的Filter,他需要实现我们的。方法,返回我们自定义的模型。方法,当没有异常发生时,在。,这样才会执行新建的中间件。原创 2024-06-04 08:21:18 · 219 阅读 · 0 评论 -
基于.NetCore和ABP.VNext的项目实战六:JWT(接入第三方GitHub进行身份认证)
认证与授权是两种含义:认证,是证明你的身份,你有账号密码,你可以登录进我们的系统,说明你认证成功了;一致时,就为其授权。然后编写生成token的方法,GitHub的这个API做了相应的安全机制,有一点要注意一下,当我们用代码去模拟请求的时候,需要给他加上。,生成Token,有了access_token,可以直接调用获取用户信息的接口,会得到一个json,将这个json包装成一个模型类。,因为是博客系统,管理员用户就只有我一个人,GitHub的用户Id是唯一的,我将自己的。,不然是不会成功返回结果的。原创 2024-06-04 08:20:46 · 722 阅读 · 0 评论 -
基于.NetCore和ABP.VNext的项目实战五:自定义消息返回,统一规范API
支持返回参数的api使用,T就是我们的返回结果,然后继承ServiceResult,指定T为class。层主要是公共的工具类、扩展方法,将统一返回模型放在这里,新建Base文件夹,新建Enum文件夹,定义一个。还需要返回带分页的数据,所以需要扩展一个分页的响应实体,当我们使用的时候,直接将分页响应实体作为上面写的。中的T参数,即可满足需求,新建文件夹PageList,添加总数接口。方法,当我们成功返回数据或者当系统出错或者参数异常的时候执行。,它同时也要接受一个泛型参数 T。,在构造函数中为其赋值。原创 2024-05-27 09:49:59 · 137 阅读 · 0 评论 -
基于.NetCore和ABP.VNext的项目实战四:自定义仓储的实现
上一章通过新建实体类,数据库迁移新建了数据库表,这一章实现自定义仓储,实现批量插入、更新的方法(abp框架中已经实现了默认的通用(泛型)仓储,,有着基本的标准的CRUD)。在领域层中创建仓储接口,、、、、,这里继承 以使用已有的通用仓储功能。 在层实现这些接口,这些类继续使用EFCore进行数据库操作,需要继承,和我们的仓储接口在和仓储接口的实现中新增了批量插入数据的方法。在服务层新建IServices和Services文件夹,分别为接口的服务原创 2024-05-27 09:49:32 · 208 阅读 · 0 评论 -
基于.NetCore和ABP.VNext的项目实战三:EFCore访问数据库和CodeFirst方式数据迁移
本篇主要使用Entity Framework Core完成对数据库的访问,以及使用Code-First的方式进行数据迁移,自动创建表结构。Nuget安装数据库迁移工具在Mag.Blog.EntityFrameworkCore项目中添加我们的数据访问上下文对象MagBlogDbContext,继承自。然后重写方法新建静态扩展类和扩展方法,用来配置实体。在.Domain层创建配置文件访问类appsettings.json中的设置值appsettings.json文件修改连接字符串。原创 2024-05-21 08:14:47 · 198 阅读 · 0 评论 -
基于.NetCore和ABP.VNext的项目实战二:Swagger
在Swagger文档中,默认只显示我们的Controller的名称,其实他也是支持描述信息的,这是就需要我们自行扩展了。手动为其初始化一些值,记录swagger的分组信息,在AddSwagger方法、UseSwaggerUI方法中遍历使用。代表API文档仅展开标记,不默然展开所有接口,需要我们手动去点击才展开,可以自行查看。方法中使用SwaggerUI。:定义一个变量,内容自拟主要是一些介绍性的描述,将在Swagger界面进行显示。方法中引用我们的XML文件,配置接口的名称版本以及描述信息,在。原创 2024-05-21 08:14:04 · 231 阅读 · 0 评论 -
基于.NetCore和ABP.VNext的项目实战一:abp cli 搭建项目
学习了阿星Plus的博客项目,自己也试着搭建自己的博客。ABP和ABP.VNext的主要区别在于核心库的精简、对领域驱动设计(DDD)的关注、以及使用的技术栈。1、ABP VNext的核心库相比ABP更加精简,它将原有许多组件从核心库中抽离成独立的组件,这使得开发者可以更灵活地选择需要的功能。这种设计使得ABP VNext更加模块化,但也意味着管理的独立项目数量增加。2、ABP VNext更加关注领域驱动设计,引入了聚合根、实体、值对象等概念,并提供了仓储模式和领域服务等基础设施。原创 2024-05-14 17:00:55 · 222 阅读 · 0 评论 -
Dapper的快速使用
Dapper是.NET下一个轻量级的ORM框架,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。Dapper通过扩展IDbConnection提供一些有用的扩展方法去查询您的数据库。用vs2022创建一个新的控制台项目,名称为“sample01”,新建类Article.cs和Comment.cs。9、联查:comment表里面有四条关于article表ID=1的评论。1、测试插入单条数据到数据库。4、测试一次删除多条数据。3、测试删除单条数据。原创 2024-05-09 15:05:21 · 88 阅读 · 0 评论 -
ASP.NET Core日志管理(Serilog)
Nuget安装:Microsoft.EntityFrameworkCore.Sqlserver,Microsoft.EntityFrameworkCore.Tools。2、用于日志输出到SQLServer数据库Serilog.Sinks.MSSqlServer。1、用于日志输出到控制台Serilog.Formatting.Compact。3、用于日志输出到文件Serilog.Sinks.RollingFile。Nuget安装:Serilog.AspNetCore。原创 2024-05-02 10:30:00 · 266 阅读 · 0 评论 -
ASP.NET Core 高级组件:标识框架(identity)
一般的系统中都需要通过数据库保存用户、角色等信息,并且需要注册、登录、密码重置、角色管理等功能,但是ASP.NET Core提供了标识(identity)框架,内置了对用户、角色等表的管理及相关的接口,简化了系统的开发。3、创建继承自IdentityDbContext的类,EFCore中的上下文类,操作数据库,其中的3个泛型参数是用户类、角色类、主键类型。2、创建用户实体类User和角色实体类Role,分别继承自IdentityUser、IdentityRole,主键自增。9、实现密码重置功能。原创 2024-04-25 08:54:22 · 221 阅读 · 0 评论 -
.NetCore——自定义筛选器
开发一个实现请求限流器功能的操作筛选器,避免恶意客户端频繁发送大量请求而消耗服务器资源,实现“1s 内只允许最多有一个来自同一个IP地址的请求”,通过自定义操作筛选器实现:新建RateLimitFilter.cs。原创 2024-04-17 15:43:54 · 478 阅读 · 0 评论 -
性能优化“万金油”:缓存Cache
这边用一个不存在的ID查询就会一直返回null,如果一直大量的恶意用不存在的ID查询数据库,那么数据库就会承受非常大的压力,可能导致服务器崩溃,所以我们可以把“查不到”也加入到缓存中,这时候就可以使用GetOrCreateAsync方法,这个方法会把null当成合法的缓存值,就可以避免缓存穿透问题。分布式系统中,缓存数据是不能共享的,集群中每个节点的web应用都要加载一份数据到自己的内存缓存中,如果集群较多,这样重复的查询,重复的加载到分布式服务器缓存中,也是有可能压垮数据库服务器的。原创 2024-04-11 15:16:45 · 333 阅读 · 1 评论 -
EFCore高级技术:表达式树
一是自己构建表达式树,二是使用DynamicLinq,直接输入查询字符串。Func输出的结果只有参数、返回值类型,Expression中有内部运算逻辑,表示Expression对象存储了运算逻辑。表达式树(expression tree)是用树形数据结构来表示代码逻辑运算的技术,在运行时访问逻辑运算的结构。2、就算要构建运行时的动态查询,首先想到的,也是利用IQueryable的延迟执行和复用的特性来完成。所以,在实际项目中,除非是自己要开发一个框架,否则一般的业务项目,都极少会需要自己构建表达式树。原创 2024-04-01 15:15:41 · 123 阅读 · 0 评论 -
EFCore 反向工程(DBFirst)----慎用
使用EFCore时一般推荐code first,也就是先创建实体类,然后根据实体类生成数据表。但是有时候数据表已经存在,这时候就需要基于数据库表来创建实体类。原创 2024-04-01 14:09:16 · 268 阅读 · 0 评论 -
.net core 项目git .gitignore文件配置
【代码】.net core 项目git .gitignore文件配置。原创 2023-12-27 14:05:22 · 675 阅读 · 0 评论 -
WPF实战项目二十二(客户端):首页添加备忘录与待办事项
3、ViewModels新建Dialogs文件夹,新建AddMemoViewModel、AddToDoViewModel。1、在View文件夹下新建文件夹Dialog,新建View:AddMemoView、AddToDoView。2、IndexView中修改按钮,绑定方法:ExecuteCommand。5、在App.xmal.cs中注册弹窗。4、修改IndexViewModel。原创 2023-12-27 14:04:23 · 1093 阅读 · 0 评论 -
WPF实战项目二十一(客户端):设置默认首页
1、在Common文件夹里面新增接口IConfigureService,来专门配置启动过程设置的一些参数。2、MainViewModel中继承接口IConfigureService,并实现。3、在app.xmal.cs中初始化过程,重写方法。原创 2023-12-21 13:31:14 · 632 阅读 · 0 评论 -
WPF实战项目十八(客户端):添加新增、查询、编辑功能
8、SearchCommand搜索事件可以和上面AddCommand合并到一起,【添加待办】按钮设置事件:ExecuteCommand,参数设置="新增",查找框设置成ExecuteCommand,参数设置="查询"7、绑定搜索输入框,首先定义一个属性,前台绑定输入框的值Search,给输入框添加回车事件。12、【保存】事件,按钮添加绑定事件,修改Excute方法、新增Add方法和Save方法。1、ToDoView.xmal添加引用,添加微软的行为类。5、前台绑定文本标题、内容、状态。原创 2023-11-30 16:28:24 · 1788 阅读 · 0 评论 -
WPF实战项目十九(客户端):修改RestSharp的引用
修改HttpRestClient,更新RestSharp到110.2.0,因为106版本和110版本的代码不一样,所以需要修改下代码。Baseservice.cs也要相应的修改。原创 2023-11-30 16:28:26 · 877 阅读 · 0 评论 -
WPF实战项目十七(客户端):数据等待加载弹框动画
1、在Common文件夹下新建文件夹Events,新建扩展类UpdateLoadingEvent。2、新建一个静态扩展类DialogExtensions来编写注册和推送等待消息弹框方法。3、在ViewModel中添加实现类NavigationViewModel。5、在View文件夹下新建用户控件ProgressView.xmal。4、在主窗体MainView.xmal中给弹窗界面命名。6、在MainView.xmal.cs中注册消息。原创 2023-11-23 16:59:23 · 1820 阅读 · 0 评论 -
WPF实战项目十六(客户端):备忘录接口
2、新增MemoService类,继承BaseService和IMemoService接口。1、新增IMemoService接口,继承IBaseService接口。5、重新编写获取备忘录信息代码,CreateMemoList。4、在MemoViewModel.cs中添加备忘录的服务。3、在App.xmal.cs中注册备忘录的服务。原创 2023-11-23 09:38:12 · 671 阅读 · 0 评论 -
WPF实战项目十五(客户端):RestSharp的使用
10、修改ToDoViewModel的代码,添加ToDoService服务,修改CreateToDoList 代码。12、F5启动项目,点击【待办事项】,显示了待办事项的列表这和webapi中返回的待办事项Json数据一样。8、新增ToDoService类,继承BaseService类和接口IToDoService。9、在客户端App.xaml中注册httprestclient、注册默认服务的地址、注册服务。7、新增IToDoService接口,继承IBaseService接口。原创 2023-11-22 16:09:23 · 1935 阅读 · 0 评论 -
WPF实战项目十四(API篇):登录注册接口
4、新增登录控制器LoginController。2、新增ILoginService接口。6、在program.cs里面添加服务。3、实现LoginService接口。5、添加AutoMapper映射关系。1、新建UserDto.cs。原创 2023-08-31 16:34:18 · 1128 阅读 · 0 评论 -
WPF实战项目十三(API篇):备忘录功能api接口、优化待办事项api接口
9、在IToDoService.cs和IMemoService.cs中添加分页查询的接口。10、在ToDoService.cs中实现接口和MemoService.cs中实现接口。8、针对查询数据可以做个优化,增加查询的页数、内容、数据量等,新建查询参数类。11、在ToDoController和MemoController中添加代码。3、新建服务接口IMemoService。4、新建服务MemoService。6、在program.cs添加服务。1、新建MenoDto.cs。原创 2023-08-29 16:19:36 · 1264 阅读 · 0 评论 -
WPF实战项目十一(API篇):待办事项功能api接口
6、ToDoController.cs里面依赖注入IUnitOfWork和IToDoService,并添加CURD的代码。3、新建待办事项接口IToDoService.cs,继承IBaseService。4、新建实现类ToDoService.cs,继承IToDoService.cs。5、program.cs里面注入服务。原创 2023-08-09 14:01:32 · 1473 阅读 · 0 评论 -
WPF实战项目十(API篇):引入工作单元UnitOfWork
2、在UnitOfWork文件夹下引用UnitOfWork下的IPagedList.cs、PagedList.cs类,WPFProjectAPI项目引用WPFProjectShared项目。4、新建控制器UserController测试下工作单元的使用 ,先新建基础控制器BaseApiController,全局Resful风格代码(详见。,下载UnitOfWork的代码,将工作单元部分的代码引用到自己的项目,新增UnitOfWork文件夹。原创 2023-07-21 11:22:10 · 721 阅读 · 0 评论 -
WPF实战项目九(API篇):创建WebApi项目,数据库迁移,EFCore
8、下面就是数据库迁移,通过Add-Migration、Update-Database命令迁移数据库。4、新建之前WPF界面有关的实体类基类BaseEntity.cs,待办事项类ToDo.cs,备忘录类Memo.cs。若使用的是SQLServer数据库就要下载EFCore的SQLServer包。5、创建数据库上下文操作类MyDbContext.cs,继承DbContext。2、 删除IIS Express,使用自带编辑器运行webapi项目成功。7、在program.cs中添加数据库上下文服务。原创 2023-07-18 13:54:45 · 1117 阅读 · 0 评论 -
.Net Core6.0 WebAPI项目框架搭建十一:自定义全局消息返回格式和配置跨域
【代码】.Net Core6.0 WebAPI项目框架搭建十一:自定义全局消息返回格式和配置跨域。原创 2023-06-07 10:38:55 · 1225 阅读 · 1 评论 -
.Net Core6.0 WebAPI项目框架搭建十:log4net完美实现全局异常日志记录
在在Web.Core.API下新建 Log4Net 文件夹内,新建 ILoggerHelper.cs。原创 2023-06-02 11:28:36 · 1772 阅读 · 0 评论 -
.Net Core6.0 WebAPI项目框架搭建九:AutoMapper的使用
在Web.Core.Services项目中引用Nuget包,AutoMapper 和 AutoMapper.Extensions.Microsoft.DependencyInjection。AutoMapper是一种实体转换关系的模型,AutoMapper是一个.NET的对象映射工具。主要作用是进行领域对象与模型(DTO)之间的转换、数据库查询结果映射至实体对象。在Web.Core.Model下添加Dto文件夹,新建模型StudentDto.cs。原创 2023-06-01 14:27:48 · 963 阅读 · 0 评论 -
.Net Core6.0 WebAPI项目框架搭建八:基于AOP切面的redis缓存
如果用户第一次从数据库中读取数据,会比较慢,是从硬盘中读取的;当用户再次访问该数据时,如果还是从数据库中读取,依然很慢,如果这时候把从数据库读取的数据存放到缓存中,再次读取的时候就是从缓存读取的,那速度就会相当快。所谓的切面,简单来说就是与业务无关,却为业务模块所共同调用的逻辑,将其封装起来便于减少系统的重复代码,降低模块的耦合度,有利用未来的可操作性和可维护性。AOP技术利用一种称为“横切”的技术,剖解开封装对象的内部,将影响多个类的公共行为封装到一个可重用的模块中,并将其命名为。2.不经常变动的数据。原创 2023-06-01 09:23:35 · 1428 阅读 · 1 评论 -
.Net Core6.0 WebAPI项目框架搭建七:IOC框架Autofac
目前.net core 项目下用的最多的IOC框架就是Autofac。StudentController也要改造一下,通过构造函数注入。然后再BaseService里面改写方法,直接通过构造函数注入。在program.cs中注入Autofac。在Nuget中引入两个。原创 2023-05-31 10:04:49 · 1507 阅读 · 1 评论 -
.Net Core6.0 WebAPI项目框架搭建六:仓储模式+导入SqlSuagr
解决方案新建Respository文件夹,新建类库Web.Core.IRepository,Web.Core.Repository。在IRepository层中,新建IStudentRepository接口,继承自IBaseRepository解决方案新建Services文件夹,新建类库Web.Core.IServices,Web.Core.Services。Repository 层中,添加Base文件夹,并添加 BaseRepository.cs 基类。原创 2023-05-25 15:57:34 · 4063 阅读 · 2 评论 -
.Net Core6.0 WebAPI项目框架搭建五:JWT权限验证
在SetUp文件夹里面新建注册方法AuthorizationSetup.cs。这里就不过多的阐述了,直接上代码。在HomeController中新建Login接口来获取Token。在appsettings.json中配置jwt参数的值。上面我们是用的Admin的权限,所以会提示403错误。在program.cs里面注册服务,开启服务。SecretKey必须大于16个字符。新建JwtHelper.cs帮助类。解析出来的role是Admin。原创 2023-05-19 11:46:26 · 4029 阅读 · 3 评论 -
.Net Core6.0 WebAPI项目框架搭建四:新建读取配置文件帮助类
在.netcore webapi 项目中,我们会把配置信息同意放置在appsettings.json中,通过新建读取帮助类,更加简单的读取配置信息。在Web.Core.Common类库下新建Helper文件夹,新建AppSettings帮助类。新建公共类库文件夹Common,新建公共类库Web.Core.Common。在program.cs里面测试下AppSettings读取配置文件。在appsetting.json里面添加数据库连接字符串。在program.cs里面添加服务。对webapi添加项目引用。原创 2023-05-17 09:14:26 · 1404 阅读 · 0 评论 -
.Net Core6.0 WebAPI项目框架搭建三:Swagger的使用
接下来就是封装一些注册代码,注册代码要是都放在program.cs里面,会显得很乱,所以我给他做一个封装,然后program.cs里面只需要services.addxxx()就行了。右键项目名称web.core.model,属性,生成,输出,勾选文档文件,自己填写相对路径。右键项目名称web.core.api,属性,生成,输出,勾选文档文件,自己填写相对路径。.net6创建项目的时候自带Swagger框架,但是缺少一些注释功能。右键解决方案,添加文件夹Model,新建类库项目。给控制器加上注释,运行项目。原创 2023-05-16 16:52:16 · 2264 阅读 · 4 评论 -
.Net Core6.0 WebAPI项目框架搭建二:实现RPC风格
将他改造成RPC风格代码,通过请求api/[controller]/[action]来访问方法。新建Homecontroller控制器,继承新建的BaseApiController控制器。以后所有的控制器只要继承BaseApiController都可以实现RPC风格。新建BaseApiController,继承ControllerBase类。新建HelloWord方法。原创 2023-05-16 15:15:27 · 817 阅读 · 0 评论 -
.Net Core6.0 WebAPI项目框架搭建一:创建.netcore 项目
选择.net 6.0(长期支持),启用docker支持,选择linux。删除IIS调试,使用项目自带的Kestrel web应用调式。调试显示的是官方提供的一个现实天气信息的api。选择asp.net core web api。这样一个基础的.netcore项目新建完成。原创 2023-05-16 14:53:29 · 1502 阅读 · 0 评论