.net core
文章平均质量分 72
菜鸟爱飞不飞
软件攻城狮
展开
-
.Net6+webApi 给swagger添加token
开发webApi 的时候,大多数情况会使用swagger调试接口,但是当api添加了权限认证注解的时候,就必须携带token才能访问,否则会返回401状态码提示无访问权限。解决办法有两种:(1)使用postman等调试工具携带token调试;(2)给swagger接口文档的请求头添加token。本文主要演示给swagger接口文档的请求头添加token。一、修改Program.cs将builder.Services.AddSwaggerGen()添加以下配置builder.Services.原创 2022-03-11 17:04:11 · 5845 阅读 · 0 评论 -
C# RabbitMQ: None of the specified endpoints were reachable
问题:docker 部署的mq使用5672端口连接始终被拒绝,报错信息如下RabbitMQ: None of the specified endpoints were reachable分析:因为我在启动容器的时候,宿主机的5672端口被占用,所以映射到了宿主机的7888端口docker run -d --name rabbitmq -p 7888:5672 -p 15672:15672 -v D:/workspace/dockermap/rabbitmq/data:/var/lib/rabbi原创 2021-08-16 16:50:57 · 2802 阅读 · 0 评论 -
09-01 C#表达式目录树
目录一、定义二、与委托的区别1、在扩展方法表达式中的区别2、声明方式的区别3、执行的区别三、表达式目录树的本质一、定义表达式目录树是一种语法树,是一种数据结构二、与委托的区别1、在扩展方法表达式中的区别List<Person> persons = new Person().Query();persons.Where(p => p.Id == 1); // where扩展方法传入的是一个委托persons.AsQueryable().Where(p => p.Id原创 2021-02-06 17:37:23 · 789 阅读 · 0 评论 -
08-04 多线程之Task
目录前言一、Task开启线程的方式1、Task实例化2、Task.Run()静态方法3、TaskFactory二、Task由线程池管理三、父子线程前言Task诞生于.NETFramework 3.0,同时支持.NET CoreTask被称为C# 中多线程的最佳实现一、Task开启线程的方式1、Task实例化Task task = new Task(() =>{ Console.WriteLine($"==================new Task start {Th原创 2021-02-06 17:36:58 · 3580 阅读 · 0 评论 -
08-03 多线程之ThreadPool
目录前言一、池化思想(循环利用,节能减排)前言Thread功能虽然强大,但是不是很好用,有很多的缺点,如:框架不会去控制线程的数量,容易被滥用,造成服务器崩溃;所以在.net framework 2.0推出了线程池,是基于Thread做了升级后的产物一、池化思想(循环利用,节能减排)如果某个对象创建和销毁的代价比较高,同时这个对象还需要反复的使用,就需要一个池子保存多个这样的对象,需要的时候从池子里面取,用完之后放回池子,不用销毁(享元模式);可以做到节约资源提升性能,此外还能管控总的数量,防原创 2021-02-06 17:36:35 · 268 阅读 · 0 评论 -
Blazor Server中为Razor组件添加CSS隔离文件,样式不生效
前言Razor组件添加CSS隔离应当是使用最为简单,也是使用最为方便的一种CSS隔离方式。实现Razor组件间CSS隔离非常简单,只需要在组件所在的目录下建立同名的.razor.css文件即可——若文件夹A下存在名为Component.razor的组件,则只需要在文件夹A下建立Component.razor.css,即可实现为Component.razor组件设置单独的样式而不影响其他组件。组件CSS文件(Component.razor.css)将会被生成为“项目名.styles.css”的文件,在.N原创 2021-02-05 23:47:31 · 5566 阅读 · 0 评论 -
Electron.net + Ant design Blazor使用 electronize start 报错无法启动
原因:Ant design Blazor 默认利用gulp:pro启动,与electron冲突解决方法:将项目.csproj文件中的红框标记的配置删掉即可原创 2021-02-04 01:50:54 · 568 阅读 · 0 评论 -
08-05 多线程之Task高级篇
目录一、Parallel1、推出时间2、控制线程数量二、多线程进阶1、多线程异常获取2、线程取消(1)全局变量法(2)CancellationTokenSource对象一、Parallel1、推出时间Parallel是.netframework 4.5版本推出Parallel 并发执行多个Action,多线程执行,线程id也不相同主线程参与计算,所以会阻塞主线程,卡顿界面相当于Task.WaitAll()/// <summary>/// .netframework 4.5版原创 2021-02-02 11:46:12 · 371 阅读 · 1 评论 -
08-02 多线程之Thread
目录一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-02-02 11:45:53 · 172 阅读 · 0 评论 -
08-01 多线程之异步
目录一、进程与线程1、定义2、关系二、C# 中的多线程1、同步方法本质特点2、异步方法本质特点三、多线程进阶1、控制线程执行顺序2、获取线程返回值一、进程与线程1、定义进程:是系统进行资源分配和调度的一个独立单位,记录当前程序在运行的时候对各种资源的消耗,,是一个虚拟概念线程:线程是进程的实例,计算机在执行某个动作,一个最小的执行流,也是虚拟概念句柄:句柄其实就是一个数字,对应计算机程序中的最小单位,如:当前程序运行Id。2、关系一个进程包括多个线程二、C# 中的多线程Thread是原创 2021-02-02 11:45:33 · 368 阅读 · 0 评论 -
06-01 C# Lambda表达式的发展史
目录一、lambda在framework 1.0版本中的形态二、lambda在framework 2.0版本中的形态三、lambda在framework 3.0版本中的形态1、3.0初期版本中的形态2、3.0后期版本中的形态发展四、lambda表达式的本质五、本文代码前期准备:在类的内部定义几个委托和方法//先定义几个自定义委托public delegate void NoReturnNoPara();public delegate void NoReturnHasPara(int x, int y原创 2021-02-02 11:44:57 · 316 阅读 · 0 评论 -
07-03 C# Linq扩展方法和表达式
针对IEnumerable类型数据原创 2021-02-02 11:42:25 · 1338 阅读 · 0 评论 -
04-01 C# 委托的声明与实例化
目录一、委托的定义二、委托的声明1、声明委托2、在该类中定义方法,参数返回值与声明的委托对应3、委托的实例化与调用4、委托的本质三、委托的应用场景四、代码地址一、委托的定义将方法当作参数传递,就是委托。二、委托的声明委托类似于方法,可以有参数和返回值,但是没有方法体(但是委托的本质不是一个方法),需要用delegate修饰,可以在类的内部声明,也可以在类的外部声明。1、声明委托namespace Lanyp.Course.Delegate{ #region delegate out o原创 2021-02-02 11:42:01 · 841 阅读 · 0 评论 -
07-01 C# Linq的诞生
目录一、linq存在的意义二、linq诞生过程思考1、方案一:通过循环和if判断来筛选数据2、方案二:扩展方法(1)最初版本(2)进化版本(3)最终版本观察三、本文代码一、linq存在的意义linq的存在是为了对数据进行操作,诞生于dotnet framework 3.0。二、linq诞生过程思考现在有一个Person集合,我们需要根据不同的条件筛选出对应的人员,又哪些方案?1、方案一:通过循环和if判断来筛选数据缺点:代码量大,不够简洁,特别是遇到复杂条件之后,会很麻烦随着条件的变更,原创 2021-02-02 11:41:22 · 207 阅读 · 0 评论 -
07-02 C# linq高级实现
目录一、接口实现Where扩展二、yield 迭代器关键字对比一、接口实现Where扩展上一章我们最终得到的where扩展方法实现如图,但是还是有缺点:只支持List调用改扩展方法,那么能不能让它更加灵活呢?当然可以:可以通过IEnumerable接口来扩展,这样做的好处:通过接口来扩展,只要实现了这个接口的,都可以使用这个扩展(如List,HashSet等)扩展性更好,更加通用/// <summary>/// /// 将原来的List<T>改为IEnumera原创 2021-02-02 11:40:43 · 286 阅读 · 0 评论 -
06-02 C# 匿名类
目录一、诞生二、普通类的实例化三、object匿名类1、优点2、缺点3、思考四、动态类型匿名类1、优点2、缺点3、思考五、弱类型(不确定类型)匿名类1、优点2、缺点3、思考4、使用场景六、本文代码一、诞生framework 3.0版本开始支持匿名类二、普通类的实例化普通类型实例化之后,可以访问其中的属性和方法/// <summary>/// 普通类/// </summary>public void InstacePerson(){ Console.Write原创 2021-02-02 11:40:10 · 1911 阅读 · 0 评论 -
06-03 C# 扩展方法
目录一、思考1、普通方式优点缺点2、借助第三方对象优点缺点3、扩展方法定义优点二、注意事项1、实例方法的优先级高于扩展方法2、不要扩展object或者没有约束的泛型三、本文代码一、思考我现在有一个类,里面有一个方法,代码如下,如果我想在给这个类新增一个方法,有哪些方案?public class Person{ public int Id { get; set; } public string Name { get; set; } public void Hello()原创 2021-02-02 11:39:25 · 142 阅读 · 0 评论 -
01-03 Electron + dotnet 5 Blazor + ElectronNET.API在linux下发布
目录一、安装npx二、安装ectron-builder三、安装asar四、修改`electron.manifest.json`配置五、压缩项目文件六、打包七、运行一、安装npxnpm install -g npx建立软链接(路径为node安装路径)sudo ln -s /home/lanyp/application/node/bin/npx /usr/local/bin/二、安装ectron-buildernpm install -g ectron-builder建立软链接(路径为no原创 2021-01-31 16:07:24 · 533 阅读 · 1 评论 -
linux安装.net core sdk
一、下载.net core sdk下载地址,sdk已经包含runtime了,所以不用再单独安装runtime二、解压并配置环境变量(1)解压(也可以不用命令解压)mkdir -p $HOME/application/dotnet && tar zxf dotnet-sdk-5.0.102-linux-x64.tar.gz -C $HOME//application/dotnet(2)配置环境变量(路径根据自己本机实际更改)export DOTNET_ROOT=$HOME//a原创 2021-01-31 14:35:07 · 2346 阅读 · 0 评论 -
Electron.Net + Blazor 构建桌面应用启动时默认端口号8000冲突
错误如下解决办法修改项目目录下的electron.manifest.json文件,添加"electronPort": [端口号],端口号自定义问题解决原创 2021-01-27 17:55:01 · 1134 阅读 · 0 评论 -
02-14 docker 部署.net core web应用
目录一、创建项目二、添加Dockerfile三、发布程序四、构建镜像五、创建容器六、访问一、创建项目创建项目过程不在赘述(不知道请自行百度)二、添加Dockerfile修改Dockerfile# 基于.net 5 FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base# 创建镜像工作目录WORKDIR /app# 所有文件从宿主publish目录复制到镜像app目录COPY . .# 执行dotnet run L原创 2021-01-27 14:37:12 · 275 阅读 · 0 评论 -
dotnet core 项目publish之后执行dotnet run “找不到要运行的项目”
原因:dotnet run命令用于项目的上下文中,而不是构建的程序集。如果您尝试运行依赖于框架的应用程序dll,则必须使用dotnet而不使用命令。解决dotnet xxxxxxxx.dll原创 2021-01-27 12:20:54 · 3962 阅读 · 0 评论 -
01-02 Electron + dotnet 5 Blazor + ElectronNET.API桌面应用打包为exe安装包
目录一、下载软件二、压缩项目文件三、构建项目三级目录一、下载软件下载并安装NSIS 和 HM NIS Edit,这两个软件是配合使用的,不安装NSIS就无法选择语言,所以先安装NSIS 再安装HM NIS Edit,使用过程中只需要操作HM NIS Edit。二、压缩项目文件(1)如果没有安装asar,请先安装npm install -g asar(2)在项目根目录下运行asar pack ./ app.asar(3)将生成的文件app.asar放到程序目录~\obj\Host\node_m原创 2021-01-23 17:12:22 · 1157 阅读 · 0 评论 -
01-01 Electron + dotnet 5 Blazor + ElectronNET.API创建桌面程序
目录前言一、开发环境二、创建项目三、启动项目四、最终效果前言随着.net core 的发布,C# 实现了跨平台,但是截至2021年1月22日,基于.net core构建的桌面程序如WPF,WinForm还是无法实现跨平台运行,所以可以构建web项目结合Electron来构可以跨平台运行的桌面程序,本文使用Electron结合Blazor App和Electron.NET类库构建桌面应用。一、开发环境1、安装Node.js2、切换淘宝镜像源npm config set registry htt原创 2021-01-23 00:43:48 · 1883 阅读 · 7 评论 -
.net core 3.1 WPF 使用FolderBrowserDialog对象打开文件资源管理器选择文件夹
前言在.net Framework WPF中使用FolderBrowserDialog对象打开文件资源管理器选择文件夹很简单,直接添加System.Windows.Forms.dll到项目中,然后引用即可调用该对象;但是在.net core 3.1 中直接引用System.Windows.Forms.dll会造成与System.Windows命名空间冲突,导致编译报错解决方案(1)打开项目的.csproj文件,可以看到.net core 3.1 WPF项目PropertyGroup默认配置如下,原创 2020-12-29 00:21:23 · 3578 阅读 · 0 评论 -
IdentityServer4 请求api验证token时报:401 “IdentityServer4 AuthenticationScheme: Bearer was challenged.”错误
如图,IdentityServer4 4.x版本包如下错误解决办法:(1)检查api站点的api名称配置是否与认证站点的相同(2)4.x再添加api资源的时候,跟之前版本有所区别,将ApiScope单独出来添加,所以要新增一个获取scope的方法(我这里是从数据库获取的),否则scope添加不上,还要特别注意第一个红框的内容,这个就是导致包上述错误的根本(3)在添加鉴权配置的时候加上scope参考:1、Asp.Net Core 中IdentityServer4 授权中心之应用实战2、原创 2020-12-09 18:30:05 · 3203 阅读 · 0 评论 -
02-12 .net core项目中使用.net core版本 exceptionless(6.0.0)
前言在阅读本文之前建议先阅读dockerb部署Exceptionless(.net core3.1)版本1、接docker部署exceptionless之后,开始相关设置(1)创建项目(2)选择项目类型,以.net core项目类型为例,获取使用说明(3)创建好了之后,也可以修改2、根据使用说明,先(vs2019NuGet包管理器)安装Exceptionless.AspNet...原创 2020-04-26 01:02:08 · 1387 阅读 · 0 评论 -
02-11 docker部署Exceptionless(.net core3.1)版本
简介Exceptionless专注于.net平台提供实时错误和日志报告。主要包括:错误通知、智能分组异常、详细错误报告堆栈跟踪、支持离线、UI查看重要错误和确定优先级、仪表板上的统计信息和趋势、对异常标记为已修复,监视回归、将事件标记为关键等。1、到github下载Exceptionless .net core版本,5.0.0及以后版本都是.net core版本,我下载的是6.0.0(wi...原创 2020-04-25 22:54:10 · 2489 阅读 · 0 评论 -
02-07 .net core 3.1 使用 Ocelot搭建api网关添加鉴权认证
前言通过使用IdentityServer4给网关添加鉴权认证可以提高api的安全性。在阅读本文之前,建议先阅读 02-01 .net core 3.1 使用 Ocelot搭建api网关一、添加一个webApi项目,命名为IdentityServer(随意)1、 然后用nuget安装IdentityServer4 包(如何操作不再赘述)2、添加一个Config.cs(类名随意)usin...原创 2020-02-28 20:28:20 · 1798 阅读 · 2 评论 -
02-06 .net core 3.1 使用 Ocelot搭建api网关实现请求头转换(Header Transform)
请求头转换(Headers Transformation)在阅读本文之前,建议先阅读 02-01 .net core 3.1 使用 Ocelot搭建api网关Ocelot允许在请求下游服务之前和之后转换Header。目前Ocelot只支持查找和替换,如果们需要转发给下游的Header重添加一个key/value。1、给下游的两个api项目分别添加HeaderTransformControll...原创 2020-02-28 14:43:21 · 2319 阅读 · 0 评论 -
02-05 .net core 3.1 使用 Ocelot搭建api网关实现缓存
缓存Ocelot中使用 CacheManager (官方推荐包)来支持缓存,本文通过使用CacheManager来实现Ocelot缓存。1、使用nuget给WebApiGateway项目(网关)安装Ocelot.Cache.CacheManager,如图2、修改WebApiGateway项目的startup.cs中的ConfigureServices方法public void Confi...原创 2020-02-27 19:34:16 · 1159 阅读 · 0 评论 -
02-03 .net core 3.1 使用 Ocelot搭建api网关实现限流
限流限流可以防止上下游服务器因为过载而崩溃,可以使用RateLimitOptions来配置限流,修改configuration.json:{ //全局baseUrl,即网关的baseUrl "GlobalConfiguration": { "BaseUrl": "http://localhost:5000/" }, "ReRoutes": [ // 第一个api...原创 2020-02-27 18:35:55 · 2145 阅读 · 4 评论 -
02-02 .net core 3.1 使用 Ocelot搭建api网关实现负载均衡
负载均衡1、修改configuration.json,当下游有多个节点时,可以使用DownstreamHostAndPorts配置{ //全局baseUrl,即网关的baseUrl "GlobalConfiguration": { "BaseUrl": "http://localhost:5000/" }, "ReRoutes": [ { "Upst...原创 2020-02-27 18:33:35 · 522 阅读 · 0 评论 -
02-04 .net core 3.1 使用 Ocelot搭建api网关实现熔断(QoS)
熔断Ocelot中的QoS(Quality of Service),其使用了Polly对超时等请求下游失败等情况进行熔断。1、用nuget安装给WebApiGateway项目Ocelot.Provider.Polly包2、修改configuration.json,在Reroutes中配置QoSOptionsExceptionsAllowedBeforeBreaking:发生几次异常后熔...原创 2020-02-27 18:31:15 · 752 阅读 · 0 评论 -
02-01 .net core 3.1 使用 Ocelot搭建api网关
1、使用vs2019创建基于.net core 3.1的webApi项目原创 2020-02-26 15:39:49 · 2935 阅读 · 5 评论 -
01-01 .net core 3.1整合swagger
##1、使用nuget安装Swashbuckle.AspNetCore##2、指定生成的xml路径:在项目上右键点击“属性–>生成–>输出–>XML文档文件”##3、修改StartUp.cs,再ConfigureService方法中添加如下代码:注意SwaggerDoc方法的第一个参数与OpenApiInfo的属性Version必须一致//添加Swaggerservi...原创 2020-02-18 18:44:43 · 579 阅读 · 0 评论