使用 FastEndpoints 来垂直切割Web API的控制器方法
在我们开发项目的Web API的时候,随着项目功能要求越来越多,可能我们会为控制器基类增加越来越多的基础功能,有些功能有一定的适应性,但可能在一般的子类中用不到,而随着对控制器控制要求越来越精细,那么需要为基类或者子类增加更多的控制功能,这样随着迭代的进行,有些控制器的功能会显得越来越笨重。这个时候,一种更加灵活、轻便的Web API处理方式,对每个控制器方法的垂直切割的API框架应运而生,本篇随笔介绍的FastEndpoints 就是其中这样的一款框架,本篇随笔介绍一些FastEndpoints的基础处
js上传多个文件到asp.net core,并实时转存到阿里云oss
有时候,为了追求便利性,我们可能会让前端直接将文件上传到阿里云OSS,然后将URL提交给ASP.。然而,这种做法意味着前端需要拥有OSS的访问密钥,而将密钥存放在前端,无疑增加了被破解的风险。因此,最安全的做法仍然是由服务器端负责上传文件到OSS。 接下来,我将演示如何实现分块上传到服务器的过程,而且在这个过程中,服务器并不保存任何分块,而是直接将分块上传到OSS。 服务器端asp. 引用 nuget 包: JMS.FileUploader.AspCe Aliyun.OSS.SDK.Ce实现一个oss的
深入了解C#中Linq的Range和Repeat方法
在C#语言中,LINQ是一种强大的查询语言,用于在.应用程序中对各种数据源执行查询操作。其中,Range和Repeat是两个在LINQ中常用的方法,它们分别用于生成一系列连续的数字和重复指定的元素。有时候会把这两个方法混淆,本文将深入探讨这两个方法的用法和应用场景。 1、Range方法 Range方法用于生成一系列连续的整数,其声明如下: public static IEnumerableint Range(int start int count)其中,start表示起始值,count表示生成的整数个数。
第二章 服务注册与发现
但在微服务架构中,每个微服务通常有多个实例,每个实例具有不同的位置,而且实例会动态变化,比如在负载发生变化时服务会进行扩容或缩容,或者某个实例所在的VMContainer故障后发生迁移,都会导致服务实例地址的变化。因此使用微服务架构开发的应用,必须通过服务注册和发现技术解决此问题。 1. 简单概述 服务注册 服务要被使用,就需要对外提供服务的位置信息,这个位置信息通常是一个IP地址+端口。在服务只有单个实例并且地址不会动态变化的情况下,服务的位置在使用端可以通过配置文件甚至代码等方式固定死。但在位置信息
第一章 微服务架构体系
1.1系统架构的演变 随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及微服务架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 1.1.1单体应用架构 Web应用程序发展的早期,大部分web工程(包含前端页面web层代码service层代码dao层代码)是将所有的功能模块打包到一起并放在一个web容器中运行。 比如搭建一个电商系统:客户下订单,商品展示,用户管理。这种将所有功能都部署在一个web容器中运行的系统就叫做单体架构。 优点:系统的简易性:系统语言风
.net中通过定时任务框架Quartz.NET来实现定期网络状态检查
Quartz. 是一个用于在 . 应用程序中实现作业调度和定时任务的开源框架。它允许你在应用程序中定义和调度作业,支持复杂的调度需求,例如定时、重复、错过执行、依赖性等。下面,我将通过一个简单的实例来详细描述 Quartz. 的功能、使用方法,并提供源代码。 在这个示例中,我将使用 Quartz. 实现每隔 20 秒检查一次网络状态。首先,确保你已经通过 NuGet 安装了 Quartz. 包。 1. 创建一个作业类 using Quartz using System using System..wkIn
第五单元 数据查询
Entity Framewk Ce 使用语言集成查询 (LINQ) 来查询数据库中的数据。 通过 LINQ 可使用 C#(或你选择的其他 . 语言)编写强类型查询。 它使用你派生得到的上下文和实体类来引用数据库对象。 EF Ce 将 LINQ 查询的表示形式传递给数据库提供程序。 反过来,数据库提供程序将其转换为数据库特定的查询语言(例如,用于关系数据库的 SQL)。 即使结果中返回的实体已存在于上下文中,也始终对数据库执行查询。 1. 查询数据 1. 入门 加载所有数据 using (var c
聊一聊 .NET高级调试 内核模式堆泄露
一:背景 1. 讲故事 前几天有位朋友找到我,说他的机器内存在不断的上涨,但在任务管理器中查不出是哪个进程吃的内存,特别奇怪,截图如下:在我的分析旅程中都是用户态模式的内存泄漏,像上图中的异常征兆已经明确告诉你了,不是用户态程序吃的内存,那就是内核态程序吃的,比如:某些驱动程序 操作系统从概率上来说一般都是某些第三方程序内存泄露导致的,这一篇我们就来聊一聊这种问题该如何解决。 二:内核模式堆泄露分析 1. 驱动程序是如何分配内存的 相信有很多朋友都知道,用户态的程序是直接或者间接的调用 VirtualAl
二维码生成解析用ZXing.NET就够了,不要再引一堆生成和解析库了
ZXing. 是一个开源的、功能强大的二维码处理库,它能够对二维码进行解码(读取信息)和编码(生成二维码)。ZXing 是 "Zebra Crossing" 的缩写,是一个跨平台的、用于解码和生成条形码和二维码的库。以下是一些 ZXing. 的主要功能通过实例讲解。 1. 生成二维码 using System using System.Drawing using ZXing using ZXing.QrCodeclass Program {static void Main(){ 创建 QR Code 编码
关于C#接口的用法详细解答,附上案例说明!
接口 C#中的接口是一种定义了一组方法、属性和事件的类型。它只包含成员的声明,而不包含任何实现。接口可以被类通过实现的方式使用,从而使类能够具有接口定义的行为。 接口在C#中被定义为使用interface关键字,接口的成员默认是公共的。类通过使用implements关键字实现接口,并提供接口中定义的所有成员的具体实现。 接口的优点实现多态性:接口允许一个类实现多个接口,从而实现多重继承。这使得类可以具有多个不同类型的行为,提供了更大的灵活性。促进代码复用:通过实现接口,可以将常用的功能和行为封装成一个接口
关于C#反射概念,附带案例!
反射 C#中的反射是一种使程序在运行时能够动态地获取类型信息并调用其成员的技术。通过反射,程序可以在运行时进行类型的动态加载、创建对象、调用方法和属性,以及访问和修改字段等。反射可以使程序更加灵活,但也增加了一定的性能开销。 在C#中,反射主要是通过System.Reflection命名空间中的类来实现的。以下是一些常用的反射类和方法:Type类:Type类表示一个类型,可以通过其静态方法获取某个类型的Type对象,例如typeof关键字和Type.GetType()方法。Type类提供了许多有用的方法,
在winform blazor hybrid中绘图
前几天跟大家介绍了在winfm中使用blaz hybrid,而且还说配上blaz的ui可以让我们的winfm程序设计的更加好看,接下来我想以一个在winfm blaz hybrid中绘图的例子来进行说明,希望对你有所帮助。 效果 在开始之前,先给大家演示一下效果,如下所示:具体实现 如果你对具体实现感兴趣,可以继续往下阅读。 1、引入ant design blaz 该应用中用到的所有组件都来源于ant design blaz。 在本文中我只介绍绘图部分的实现,首先需要在项目中引入ant design bl
掌握ImageSharp图像处理的艺术,一步步领略图像处理的奇妙世界
ImageSharp:.平台上的灵活高性能图像处理库 ImageSharp 是一个强大的图像处理库,专为.平台设计。无论是简单的图像加载和保存,还是复杂的图像处理、滤镜应用和文本添加,ImageSharp 提供了丰富而灵活的功能,使图像处理变得简单而愉快。 主要特性:跨平台支持: ImageSharp 可以在各种.平台上运行,包括Windows、Linux和macOS,为开发者提供更大的灵活性。 丰富的图像处理功能: 从基础的加载、保存、调整大小,到高级的裁剪、滤镜应用、缩略图生成,ImageSharp
Visual Studio快捷键总览,推荐VS+Resharper实现高效开发
VS2022之后,其实还挺好用的,但个人还是习惯VS+Resharper的强强组合,尤其是Ctrl+N快捷键的全局搜,比VS自带的Ctrl+T好用太多了,Ctrl+B还能直接查看反编译之后的dll的方法。下面是常用VS快捷键,收藏记录下。 1、项目快捷键CTRL + SHIFT + B生成解决方案CTRL + F7 生成编译CTRL + O 打开文件CTRL + SHIFT + O打开项目CTRL + SHIFT + C显示类视图窗口F4 显示属性窗口SHIFT + F4显示项目属性窗口CTRL + SH
你知道如何修改ASP.NET Core默认端口吗?常用5种方法实例演示
下面针对 ASP. Ce 中修改默认端口的五种常用方法的详细示例,分别对应 appsettings.json 配置 Kestrel 的 Endpoint、使用 UseUrls 方法、命令行参数方法、host.json 配置方法和使用 Docker 的方式。 方法一:appsettings.json 配置 Kestrel 的 Endpoint在 appsettings.json 中添加端口配置:{"Kestrel": {"EndPoints": {"Http": {"Url": "http:localhos
聊一聊 .NET高级调试 中必知的符号表
一:背景 1. 讲故事 在高级调试的旅行中,发现有不少人对符号表不是很清楚,其实简而言之符号表中记录着一些程序的生物特征,比如哪个地址是函数(签名信息),哪个地址是全局变量,静态变量,行号是多少,数据类型是什么 等等,目的就是辅助我们可视化的调试,如果没有这些辅助我们看到的都是一些无意义的汇编代码,逆向起来会非常困难,这一篇我们就来系统的聊一聊。 二:程序编译的四个阶段 1. 案例代码 要想理解符号表,首先需要理解 代码文件 是如何变成 可执行文件 的,即如下的四个阶段。预处理阶段 编译阶段 汇编阶段 链
.NET Core MVC基础之返回文件类型
. Ce MVC基础之返回文件类型📄 前言 上一篇文章讲了基础的返回类型,这篇文章讲解如何返回文件类型给浏览器下载。 系列文章. MVC基础之页面传值方式 通过图片流来返回图片 返回类型介绍 在返回文件之前,要知道MIME 类型,这里介绍常用的几种:textplain:纯文本文件 texthtml:HTML 文件 textcss:CSS 文件 applicationjson:JSON 数据 applicationxml:XML 数据 applicationpdf:PDF 文件 imagejpeg:JPE
第四单元 管理数据库架构
EF Ce 提供两种主要方法来保持 EF Ce 模型和数据库架构同步。至于我们应该选用哪个方法,请确定你是希望以 EF Ce 模型为准还是以数据库为准。如果希望以 EF Ce 模型为准,请使用迁移。 对 EF Ce 模型进行更改时,此方法会以增量方式将相应架构更改应用到数据库,以使数据库保持与 EF Ce 模型兼容(CodeFirst,小项目用这种)。如果希望以数据库架构为准,请使用反向工程。 使用此方法,可通过将数据库架构反向工程到 EF Ce 模型来生成相应的 DbContext 和实体类型(DbFi
第三单元 模型创建
模型创建分为正向工程(CodeFirst)与反向工程(DbFirst). 正向工程的模型配置也可以创建任意的数据库关系对象,如:字段,字段说明,表,索引,外键等等。 可在派生上下文中替代 OnModelCreating 方法,并使用 ModelBuilder API 来配置模型。 此配置方法最为有效,并可在不修改实体类的情况下指定配置。 Fluent API 配置具有最高优先级,并将替代约定和数据注解(特性)。由于FluentAPI编写起来比较麻烦,实际开发中很少手写。using Microsoft.En
C#开源克隆类库DeepCloner的功能、优点与妙用
在开发过程中有时候我们需要对现有对象进行克隆,我们可以使用DeepCloner类库来完成这个需求功能。 DeepCloner 类库 功能:深度克隆: DeepCloner 提供深度克隆对象的能力,递归地克隆对象图中的所有引用类型属性。 循环引用处理: 能够处理对象图中的循环引用,防止无限递归。 自定义克隆行为: 允许用户通过接口或委托来指定特定类型的克隆行为,实现个性化的克隆定制。 性能优化: 使用 IL 代码生成技术,保持在大型对象图上的较高性能。优点:简单易用: DeepCloner 提供简洁的 AP
第二单元 EFCore 入门
1. 快速入门 创建新的控制台项目dot new console o EFGetStarted cd EFGetStarted 安装 Entity Framewk Ce要安装 EF Ce,请为要作为目标对象的 EF Ce 数据库提供程序安装程序包。 本教程使用 SQLite 的原因是,它可在 . Ce 支持的所有平台上运行 。dot add package Microsoft.EntityFramewkCe.Sqlite 创建模型定义构成模型的上下文类和实体类。 using Microsoft.E
记一次 .NET 某新能源材料检测系统 崩溃分析
一:背景 1. 讲故事 上周有位朋友找到我,说他的程序经常会偶发性崩溃,一直没找到原因,自己也抓了dump 也没分析出个所以然,让我帮忙看下怎么回事,那既然有 dump,那就开始分析呗。 二:Windbg 分析 1. 到底是哪里的崩溃 一直跟踪我这个系列的朋友应该知道分析崩溃第一个命令就是 !analyze v ,让windbg帮我们自动化异常分析。0:033 !analyze v CONTEXT: (.ecxr) rax=00000039cccff2d7 rbx=00000039c85fc2b0 rc
ASP.NET Core 8 在 Windows 上各种部署模型的性能测试
ASP. Ce 8 在 Windows 上各种部署模型的性能测试 我们知道 Asp. Ce 在 windows 服务器上部署的方案有 4 种之多。这些部署方案对性能的影响一直以来都是靠经验。比如如果是部署在 IIS 下,那么 In Process 会比 Out Process 快;如果是 Self Host 那么使用 HttpSys 服务器会比 Kestrel 快。 那么真实结果是否如我们想象的那样呢?接下来就让我们来做一次 benchmarks 吧。 托管模型 在开始 benchmark 测试之前,我们
探秘C#中的秘密通道:五种引人注目的方法调用内部或私有方法
在 C# 中,可以使用不同的方法调用内部或私有方法。下面分别介绍通过反射、MethodInfo.CreateDelegate、表达式(树)、动态方法(call)、动态方法(calli)这五种方法。1. 通过反射方法 使用反射可以访问和调用内部或私有方法。 using System using System.Reflectionpublic class MyClass {private void MyPrivateMethod(){Console.WriteLine("调用了私有方法")} }class P
.net中加解密用BouncyCastle就够了,支持常用的各种加密解密算法
BouncyCastle 是一个流行的 Java 加解密库,也支持在 . 平台上使用。下面是 BouncyCastle 在 . 下使用的一些常见功能,包括 AES、RSA、MD5、SHA1、DES、SHA256、SHA384、SHA512 等。在开始之前,请确保你已经将 BouncyCastle 的 NuGet 包安装到你的项目中。你可以通过 NuGet 包管理器控制台或 Visual Studio 中的 NuGet 包管理器进行安装。 InstallPackage BouncyCastle 接下来,我将
一个程序猿的2023总结:《寻找》
前言 一年又快结束,疫情似乎已经离去,但是最近的感冒又让人感受到了一丝不安~ 回顾着过往几年,一个词形容:浑浑噩噩。 总结着 2023 年,有开心,有憧憬,有遗憾,有成长但如果用一个词的话,我觉得是:寻找 2023 的到来,也给我这浑浑噩噩的人生带来了一丝光亮,希望能够伴随着这一丝光亮,让我继续前行。 生活一颗石子落入水中,激起一片涟漪 谈了一场恋爱,很开心,很遗憾,很难过 疫情结束,一些事情终于尘埃落定 某一瞬间,发现父母已不再年轻,苍老了许多 活着,健康的活着,就已经很不容易了 思考着为什么而活,寻找
.net实现后台服务就这么简单,只要实现IHostedService接口就行了
IHostedService 接口在. Ce中的主要用途是定义应用程序生命周期内运行的后台服务。这些服务可以执行初始化、长时间运行的任务、定期运行的任务等。通过实例,我们可以演示如何使用 IHostedService 来实现一个简单的网络检测服务,并记录日志。 首先,我们需要创建一个实现 IHostedService 接口的类。在这个类中,我们将使用 HttpClient 定期检测网络是否正常,并通过 ILogger 记录日志。 using System using System..Http using
浅谈WPF之控件拖拽与拖动
使用过office的visio软件画图的小伙伴都知道,画图软件分为两部分,左侧图形库,存放各种图标,右侧是一个画布,将左侧图形库的图标控件拖拽到右侧画布,就会生成一个新的控件,并且可以自由拖动。那如何在WPF程序中,实现类似的功能呢?今天就以一个简单的小例子,简述如何在WPF中实现控件的拖拽和拖动,仅供学习分享使用,如有不足之处,还请指正。 涉及知识点 WPF控件的拖拽与拖动,主要涉及知识点如下所示:容器布局,本示例采用左右布局,主容器采用Grid并分成两列进行布局,左侧图标库采用UnifmGrid
在winform中使用blazor hybrid构建页面
1、Blaz Hybrid简介 Blaz Hybrid 使开发人员能够将桌面和移动本机客户端框架与 . 和 Blaz 结合使用。在 Blaz Hybrid 应用中,Raz 组件在设备上是本机运行的。 这些组件通过本地互操作通道呈现到嵌入式 Web 视图控件。 组件不在浏览器中运行,并且不涉及 WebAssembly。 Raz 组件可快速加载和执行代码,这些组件可通过 . 平台完全访问设备的本机功能。2、效果3、步骤 如果对在winfm中使用blaz hybrid感兴趣的话,可以继续往下阅读,看看具体的实现
.net下优秀的MQTT框架MQTTnet使用方法,物联网通讯必备
MQTT 是一个高性能的MQTT类库,支持. Ce和. Framewk。 MQTT 原理: MQTT 是一个用于.的高性能MQTT类库,实现了MQTT协议的各个层级,包括连接、会话、发布订阅、QoS(服务质量)等。其原理涉及以下关键概念:MqttClient: MqttClient 是MQTT库中表示客户端的主要类。它负责与MQTT服务器建立连接,并处理消息的发布和订阅。 MqttServer: MqttServer 则表示MQTT服务器,负责接受客户端的连接,管理连接状态,并转发消息到相应的订阅者。 消