Loading

合集-Asp.Net Core造轮之旅:逐步构建自己的开发框架

摘要:本系列适用于已有一定.NET开发基础,学习asp.net core人士。 基础篇 asp.net core之Startup asp.net core之依赖注入 asp.net core之中间件 asp.net core之Host asp.net core之Kestrel asp.net core之配 阅读全文
posted @ 2023-07-24 16:15 饭勺oO 阅读(2544) 评论(1) 推荐(5)
摘要:## Startup介绍 Startup是Asp.net Core的应用启动入口。在.NET5及之前一般会使用startup.cs类进行程序初始化构造。如下: ```csharp public class Startup { public Startup(IConfiguration configu 阅读全文
posted @ 2023-07-24 16:19 饭勺oO 阅读(2877) 评论(1) 推荐(5)
摘要:## 依赖注入概念 ASP.NET Core 支持依赖关系注入 (DI) 软件设计模式,这是一种在类及其依赖关系之间实现[控制反转 (IoC)](https://learn.microsoft.com/zh-cn/dotnet/standard/modern-web-apps-azure-archi 阅读全文
posted @ 2023-07-25 14:55 饭勺oO 阅读(2121) 评论(1) 推荐(10)
摘要:## 中间件介绍 在asp.net core中,中间件中间件是一种装配到应用管道以处理请求和响应的软件。每个组件: - 选择是否将请求传递到管道中的下一个组件。 - 可在管道中的下一个组件前后执行工作。 请求委托用于生成请求管道。 请求委托处理每个 HTTP 请求。ASP.NET Core 请求管道 阅读全文
posted @ 2023-07-26 15:25 饭勺oO 阅读(1444) 评论(1) 推荐(8)
摘要:## Host简介 在ASP.NET Core中,Host是一个托管应用程序的宿主环境。它提供了一种统一的方式来启动和运行应用程序,无论是在开发环境中还是在生产环境中。Host负责处理应用程序的生命周期、配置和依赖项管理等任务,使开发人员能够专注于应用程序的业务逻辑。 Host是通过使用IHostB 阅读全文
posted @ 2023-07-27 11:09 饭勺oO 阅读(1250) 评论(2) 推荐(3)
摘要:## 简介 在ASP.NET Core中,Kestrel是一个重要的组件,它是一个跨平台的、开源的Web服务器,专门为ASP.NET Core应用程序而设计。Kestrel以其轻量级和高性能而闻名,本文将介绍Kestrel的原理,并与其他Web服务器进行比较,以展示其优势和特点。Kestrel 服务 阅读全文
posted @ 2023-07-27 11:32 饭勺oO 阅读(1571) 评论(0) 推荐(0)
摘要:## 简介 配置在asp.net core中可以说是我们必不可少一部分。ASP.NET Core 中的应用程序配置是使用一个或多个配置提供程序执行的。 配置提供程序使用各种配置源从键值对读取配置数据,普通最常用的应该是下面几种: - 设置文件,例如 appsettings.json - 环境变量 - 阅读全文
posted @ 2023-07-27 17:14 饭勺oO 阅读(1331) 评论(1) 推荐(4)
摘要:本文将介绍 ASP.NET Core 中的 Options 概念和使用方法。Options 是一种配置管理机制,可以将应用程序的配置信息从代码中分离出来,提高代码的可维护性和可测试性。我们将详细介绍如何定义 Options 类、注册 Options、使用 Options,并提供相应的示例代码。此外, 阅读全文
posted @ 2023-07-31 11:22 饭勺oO 阅读(1204) 评论(2) 推荐(3)
摘要:日志记录在应用程序开发中起着至关重要的作用,它可以帮助开发人员诊断和调试问题,同时也是监控和性能优化的重要工具。ASP.NET Core 提供了强大且灵活的日志记录功能,本文将详细介绍ASP.NET Core 中的日志记录,包括日志配置、日志类别级别、使用场景以及日志记录提供程序。 ## 日志配置 阅读全文
posted @ 2023-08-01 10:55 饭勺oO 阅读(1407) 评论(5) 推荐(5)
摘要:在 ASP.NET Core 中,路由是一个非常重要的概念,它决定了如何将传入的请求映射到相应的处理程序。本文将详细介绍 ASP.NET Core 中的路由系统,包括路由的基本原理、路由模板、路由参数、路由约束等内容,并提供相应的代码示例。 ## 基本示例 ```csharp var builder 阅读全文
posted @ 2023-08-02 15:37 饭勺oO 阅读(993) 评论(3) 推荐(1)
摘要:在开发过程中,处理错误是一个重要的方面。ASP.NET Core提供了多种方式来处理错误,以确保应用程序的稳定性和可靠性。 ## TryCatch TryCatch是最常见也是最基础的一种异常处理方式,只需要用TryCatch把执行代码包起来,即可捕获异常。格式如下: ```csharp try { 阅读全文
posted @ 2023-08-03 15:43 饭勺oO 阅读(1293) 评论(4) 推荐(3)
摘要:本文介绍了ASP.NET Core中的HttpClient和HttpClientFactory的作用、用法以及最佳实践。通过示例代码的展示,读者可以了解如何使用HttpClient发送HTTP请求并处理响应,以及如何使用HttpClientFactory来解决HttpClient的一些问题,如资源泄 阅读全文
posted @ 2023-08-04 11:53 饭勺oO 阅读(1356) 评论(0) 推荐(5)
摘要:本文将介绍ASP.NET Core SignalR,这是一个强大的实时通信库,用于构建实时、双向通信应用程序。我们将探讨SignalR的基本概念、架构和工作原理,并提供一些示例代码来帮助读者更好地理解和使用SignalR。ASP.NET Core SignalR提供了一种简单而强大的方式来构建实时通 阅读全文
posted @ 2023-08-04 16:35 饭勺oO 阅读(615) 评论(0) 推荐(2)
摘要:EF Core(Entity Framework Core)是一个轻量级、跨平台的对象关系映射(ORM)框架,用于在.NET应用程序中访问和操作数据库。它是Entity Framework的下一代版本,专为.NET Core应用程序而设计。EF Core提供了一种简单、灵活和高效的方式来与各种数据库 阅读全文
posted @ 2023-08-07 11:16 饭勺oO 阅读(1120) 评论(1) 推荐(5)
摘要:在我们造轮子的起初,基建非常重要,而依赖注入是我们使用频率最高的一项,频繁的手动注入太麻烦,所以我们来实现一下自动化注入。 技术选型 在ASP.NET Core中,有两种常见的依赖注入方式:原生依赖注入和三方依赖注入。 原生依赖注入 ASP.NET Core提供了一个内置的依赖注入容器,可以用于管理 阅读全文
posted @ 2023-10-08 11:43 饭勺oO 阅读(804) 评论(0) 推荐(0)
摘要:在日常使用中日志也是我们必不可少的一环,在原生日志组件中支持的日志驱动比较少,所以我们需要使用一些三方日志组件来扩展我们的日志记录。 集成Serilog 三方日志组件有很多,如NLOG,LOG4NET等等,这里个人习惯,使用Serilog。Serilog的集成方式非常简单。 安装Nuget包 Ser 阅读全文
posted @ 2023-10-08 11:44 饭勺oO 阅读(324) 评论(0) 推荐(0)
摘要:异常处理也是我们必不可少的一环,借助Asp.netCore的UseExceptionHandler中间件,我们可以很轻易的配置我们的业务异常处理逻辑。 自定义业务异常类 首先我们定义一个业务异常类,继承Exception,添加一个Code状态码属性,和MessageData数组,这个数组用于Form 阅读全文
posted @ 2023-10-08 11:45 饭勺oO 阅读(369) 评论(0) 推荐(0)
摘要:在上文中我们实现了统一业务异常处理,在异常响应中我们也使用了统一的响应格式返回给客户端。接下来我们就讲一下约定统一的氢气响应格式。在业务开发中,一个规范统一的请求响应格式可以提高我们的前后端开发对接效率,同时清晰的结构提高了可读性。 响应基类 首先定义一个最基础的只提供Code和Message两个属 阅读全文
posted @ 2023-10-08 11:46 饭勺oO 阅读(324) 评论(0) 推荐(0)
摘要:缓存也是在业务开发过程中经常使用的一环。在Asp.net core中,原生包含了MemoryCache内存缓存和DistributedCache分布式缓存两种缓存。在Program中添加以下代码注册服务之后即可使用依赖注入使用两种缓存。 builder.Services.AddMemoryCache 阅读全文
posted @ 2023-10-08 16:50 饭勺oO 阅读(362) 评论(0) 推荐(0)
摘要:Dotnet的ORM千千万,还是喜欢用EF CORE 前面一些基础完成的差不多了,接下来可以集成数据库了,官方出品的ORM还是比较香。所以接下来就是来集成EF CORE。 安装包 首先我们需要安装一下EF CORE的NUGET包,有如下几个: Microsoft.EntityFrameworkCor 阅读全文
posted @ 2023-10-08 17:32 饭勺oO 阅读(1308) 评论(8) 推荐(2)
摘要:在前面我们完成了应用最基础的功能支持以及数据库配置,接下来就是我们的用户角色登录等功能了,在asp.net core中原生Identity可以让我们快速完成这个功能的开发,在.NET8中,asp.net core identity支持了WebApi的注册登录。这让我们在WebApi中可以更爽快的使用 阅读全文
posted @ 2023-10-09 11:09 饭勺oO 阅读(1489) 评论(12) 推荐(7)
摘要:前面我们已经弄好了用户角色这块内容,接下来就是我们的授权策略。在asp.net core中提供了自定义的授权策略方案,我们可以按照需求自定义我们的权限过滤。这里我的想法是,不需要在每个Controller或者Action打上AuthorizeAttribute,自动根据ControllerName和 阅读全文
posted @ 2023-10-09 17:11 饭勺oO 阅读(949) 评论(1) 推荐(3)
摘要:上文已经完成了自定义授权策略,那么接下来就得完善我们的权限管理了。不然没有数据,如何鉴权~ 表设计 创建我们的表实体类: namespace Wheel.Domain.Permissions { public class PermissionGrant : Entity<Guid> { public 阅读全文
posted @ 2023-10-10 11:11 饭勺oO 阅读(1033) 评论(0) 推荐(1)
摘要:多语言也是我们经常能用到的东西,asp.net core中默认支持了多语言,可以使用.resx资源文件来管理多语言配置。但是在修改资源文件后,我们的应用服务无法及时更新,属实麻烦一些。我们可以通过扩展IStringLocalizer,实现我们想要的多语言配置方式,比如Json配置,PO 文件配置,E 阅读全文
posted @ 2023-10-11 14:49 饭勺oO 阅读(856) 评论(0) 推荐(1)
摘要:在asp.net core identity中已经有RoleManager,我们只需要封装一下API操作Role即可完成我们角色管理相关功能,这里API打算只提供分页查询,创建以及删除,不提供修改API。 实现RoleManageAppService IRoleManageAppService na 阅读全文
posted @ 2023-10-12 11:49 饭勺oO 阅读(210) 评论(0) 推荐(1)
摘要:跟角色管理一样,asp.net core identity中已经包含了UserManager,我们只需要简单包装一下逻辑即可完成我们的用户管理相关功能。 这里只打算添加分页查询,创建以及修改用户的API,不提供删除API。 实现UserManageAppService IUserManageAppS 阅读全文
posted @ 2023-10-12 11:49 饭勺oO 阅读(148) 评论(0) 推荐(0)
摘要:前面完成了基础管理的相关API,接下来就得做一个菜单管理了,用于对接管理后台前端界面。 设计菜单结构 菜单是一个多级结构,所以我们得设计一个树形的。包含自己上级和下级的属性。同时预留Permission用于做可选的权限限制。 namespace Wheel.Domain.Menus { /// <s 阅读全文
posted @ 2023-10-12 11:50 饭勺oO 阅读(723) 评论(0) 推荐(1)
摘要:在前面实现管理API的时候,可以看到我们用的挺多功能是没有通过构造函数注入的。比如缓存DistributedCache,MemoryCache,对象映射Mapper,多语言L,当前用户CurrentUser等等。这些全都初始化在WheelServiceBase以及WheelControllerBas 阅读全文
posted @ 2023-10-12 12:15 饭勺oO 阅读(250) 评论(0) 推荐(0)
摘要:前面基础管理的功能基本开发完了,接下来我们来优化一下开发功能,来添加EventBus功能。EventBus也是我们使用场景非常广的东西。这里我会实现一个本地的EventBus以及分布式的EventBus。分别使用MediatR和Cap来实现。 现在简单介绍一下这两者:MediatR是一个轻量级的中介 阅读全文
posted @ 2023-10-12 17:53 饭勺oO 阅读(1110) 评论(3) 推荐(1)
摘要:前面我们的EventBus已经弄好了,那么接下来通过EventBus来实现我们的消息推送就是自然而然的事情了。说到消息推送,很多人肯定会想到Websocket,既然我们使用Asp.net core,那么SignalR肯定是我们的首选。接下来就用SignalR来实现我们的消息实时推送。 Notific 阅读全文
posted @ 2023-10-13 15:26 饭勺oO 阅读(1314) 评论(1) 推荐(0)
摘要:在前面我们基本把应用框架的基础设施搭建完成。接下来我们就得着手处理一下种子数据的问题。在一个基础框架里面,种子数据很重要,比如一些基础数据,初始用户等等,这些都需要初始化,否则程序启动却无法使用就很尴尬了。 IDataSeeder 首先定义一个种子数据接口 using Wheel.Dependenc 阅读全文
posted @ 2023-10-16 11:07 饭勺oO 阅读(910) 评论(0) 推荐(3)
摘要:先简单对比以下GraphQL和WebAPI:GraphQL和Web API(如RESTful API)是用于构建和提供Web服务的不同技术。 数据获取方式: Web API:通常使用RESTful API,客户端通过发送HTTP请求(如GET、POST、PUT、DELETE)来获取特定的数据。每个请 阅读全文
posted @ 2023-10-16 17:24 饭勺oO 阅读(688) 评论(2) 推荐(3)
摘要:前面我们基础设施基本搭建完毕,后面可以做一些稍微复杂点的功能了,接下来就来实现一个设置管理。设置管理一般用做一些系统设置之类的,如邮箱配置等,面向使用人员。而不需要修改我们的配置文件,修改配置文件的方式就偏向于技术人员了。话不多说,开造。 设计结构 设置管理中需要2个表,一个是设置组表,比如什么邮箱 阅读全文
posted @ 2023-10-19 11:44 饭勺oO 阅读(725) 评论(1) 推荐(3)
摘要:前面我们完成了设置管理,接下来正好配合设置管理来实现文件管理功能。文件管理自然包括文件上传,下载以及文件存储功能。设计要求可以支持扩展多种存储服务,如本地文件,云存储等等。 数据库设计 首先当然是我们的数据库表设计,用于管理文件。创建一个文件信息存储表。 using Wheel.Domain.Com 阅读全文
posted @ 2023-10-23 10:57 饭勺oO 阅读(843) 评论(0) 推荐(2)
摘要:在前面的篇章中,我们一起探讨了单层应用,从基础设施的建设到实现各种业务功能,我们的单层应用经历了一次又一次的进化。让我们来回顾一下我们所实现的一些重要功能。 首先,我们在基础设施方面取得了巨大的进展。我们实现了自动依赖注入,这个神奇的技术让我们能够轻松管理各个模块之间的依赖关系,提高了代码的可维护性 阅读全文
posted @ 2023-10-26 16:32 饭勺oO 阅读(889) 评论(0) 推荐(5)
摘要:前面我们已经逐步完善了我们的单层应用,但是随着复杂度提升,单层应用逐渐变得臃肿。为了更好地应对日益增长的业务需求和保持应用的可维护性,我们需要考虑将单层应用升级为多层应用。 升级思路 在单层应用中,我们讲基础设施的功能以及业务功能都写在同一个项目中,这将使得后期复杂度越来越高,可维护性越来越低。 首 阅读全文
posted @ 2024-01-22 16:52 饭勺oO 阅读(286) 评论(0) 推荐(0)
摘要:接上文,我们已经粗略的拆分了单层应用,主要讲一些基础设施功能代码抽离出去,但是业务代码部分还是比较臃肿。 接下来就准备将业务部分抽离一下。 思路 前面将一些基础的部分抽离出去了,接下来就是业务和API方面,这里准备再抽离出两个类库。分别是Api和Application。 Api主要是接口部分的代码。 阅读全文
posted @ 2024-01-22 17:51 饭勺oO 阅读(443) 评论(0) 推荐(1)
摘要:接上文,我们已经初步完成了单层到多层的拆分,接下来就是再优化我们的结构了。 升级思路 在前文的Core项目中,包含了我们所有的基础功能,但是有些项目可能只需要部分功能却引用整一块Core的话,会显得有些多余,需要将这部分基础设施再做一下细致化的拆分。 在Host项目中,仍旧还有许多功能代码没有拆分, 阅读全文
posted @ 2024-01-23 16:54 饭勺oO 阅读(486) 评论(2) 推荐(2)