ASP.NET Core

【无私分享:ASP.NET CORE 项目实战(第六章)】读取配置文件(一) appsettings.json

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-15 15:55:35
原文: 【无私分享:ASP.NET CORE 项目实战(第六章)】读取配置文件(一) appsettings.json 目录索引   【无私分享:ASP.NET CORE 项目实战】目录索引 简介   在我们之前的Asp.net mvc 开发中,一提到配置文件,我们不由的想到 web.config 和 app.config ,在 core 中,我们看到了很多的变化,新的配置系统显得更加轻量级,具有更好的扩展性,并且支持多样化的数据源。   博客园对于这个的讲解很多,比如: Artche ,但是,没有点基础看老A的博客还是有些吃力的,对于老A介绍的配置,我也是看的一头雾水,在后面的文章中,我会用像我们这些菜鸟容易接受的方式,重新解释一下。   今天,我们以 appsettings.json 为例,读取一些简单的系统配置。 appsettings.json    在 第二章 中,我们在讲到EF上线文时,在 Startup.cs 添加 services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServerConnection"))); 已经使用到了 appsettings.json   我们添加一些简单的系统配置

ASP.NET Core 实现 MQTT通讯协议 Demo(开源库:MQTTnet)

半世苍凉 提交于 2020-08-15 13:32:48
1、什么是MQTT   MQTT(message queuing telemetry transport)是IBM开发的即时通讯协议,是一种发布/订阅极其轻量级的消息传输协议,专门为网络受限设备、低宽带以及高延迟和不可靠的网络而设计的。由于以上轻量级的特点,是实现智能家居的首选传输协议,相比于XMPP,更加轻量级而且占用宽带低。 简单来说HQTT是一种通信协议,要实现发布/订阅就必须遵循这个协议。 2、实现MQTT通讯协议.NET开源库有哪些?   MQTTnet、MqttDotNet、nMQTT、M2MQTT等,这里我们使用MQTTnet(但MQTTnet搜到的教程基本都是2.7及以下版本的, 我们使用的是3.0.9版本 )   官网项目URL: https://github.com/chkr1011/MQTTnet 3、展示MQTT实现效果图      例: 客户端1只要订阅了positon主题,客户端2、客户端3、客户端4.....同样订阅了position主题则他们之间就能共享position主题的所发的内容了 。   如果客户端1订阅了position主题,客户端2订阅了beautiful主题,1发给消息2是收不到的。 4、创建.NETCore项目(Server和Client)    5、服务器   添加Nuget包:安装MQTTnet    class Program

asp.net core 3.1多种身份验证方案,cookie和jwt混合认证授权

时光怂恿深爱的人放手 提交于 2020-08-15 13:20:40
开发了一个公司内部系统,使用asp.net core 3.1。在开发用户认证授权使用的是简单的cookie认证方式,然后开发好了要写几个接口给其它系统调用数据。并且只是几个简单的接口不准备再重新部署一个站点,所以就直接在MVC的项目里面加了一个API区域用来写接口。这时候因为是接口所以就不能用cookie方式进行认证,得加一个jwt认证,采用多种身份验证方案来进行认证授权。 认证授权 身份验证是确定用户身份的过程。 授权是确定用户是否有权访问资源的过程。 在 ASP.NET Core 中,身份验证由 IAuthenticationService 负责,而它供身份验证中间件使用。 身份验证服务会使用已注册的身份验证处理程序来完成与身份验证相关的操作。 认证-->授权 关于认证授权我们要区分认证和授权是两个概念,具体可查看MSDN官方文档也可以搜索其它文章看看,讲的很多。其中包括OAuth 2.0 以及jwt的相关知识都有很多资料并且讲解的很好。 身份认证 身份验证方案由 Startup.ConfigureServices 中的注册身份验证服务指定: 方式是在调用 services.AddAuthentication 后调用方案特定的扩展方法(例如 AddJwtBearer 或 AddCookie)。 这些扩展方法使用 AuthenticationBuilder.AddScheme

ASP.NET Core搭建多层网站架构【4-工作单元和仓储设计】

那年仲夏 提交于 2020-08-15 12:59:45
2020/01/28, ASP.NET Core 3.1, VS2019, Microsoft.EntityFrameworkCore.Relational 3.1.1 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【4-工作单元和仓储设计】 使用泛型仓储(Repository)和工作单元(UnitOfWork)模式封装数据访问层基础的增删改查等方法 文章目录 此分支项目代码 关于本章节的工作单元模式: 泛型仓储封装了通用的增删改查方法,由工作单元统一管理仓储以保证数据库上下文一致性。 要获取仓储,都从工作单元中获取,通过仓储改动数据库后,由工作单元进行提交。 代码参考 Arch/UnitOfWork 的设计,大部分都是参考他的,然后做了一些中文注释,去除了分布式多库支持 添加包引用 向 MS.UnitOfWork 项目添加对 Microsoft.EntityFrameworkCore.Relational 包的引用: <ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.1" /> </ItemGroup> 分页处理封装 在 MS.UnitOfWork 项目中添加Collections文件夹,在该文件夹下添加

造轮子-AgileConfig基于.NetCore的一个轻量级配置中心

大城市里の小女人 提交于 2020-08-15 11:22:51
微服务确实是行业的一个趋势,我自己也在把一些项目往微服务架构迁移。玩微服务架构配置中心是一个绕不过去的东西,有很多大牌的可以选,比如spring-cloud-config,apoll,disconf等等。而我为什么还要造一个轮子呢?一来这些都不是.net实现的,我就想试试用.net core实现一个,而且他们也对.net不太友好,也只有apoll提供了官方的.net客户端。二来这些组件都太重量级了,比如apoll,光跑起来就要部署多个节点(admin,portal,meta sevice)还要依赖eureka。很多旧的项目往微服务迁移的时候并不是一下次全部调整完成的,可能是一步步来的,比如先把所有的服务都容器化,并没有使用微服务全家桶。而且有的项目也不需要微服务全家桶,毕竟微服务不是银弹,很多项目单体结构就足够了,有些项目传统的SOA架构也可以了。(唠叨一句,那种毫无流量毫无并发的项目,几人几天就搞完的强上微服务真的好吗?)但是这些项目也可能是分布式的,容器化部署的,那么这些项目我觉得也是需要配置中心的,因为在分布式、容器化环境下更改配置实在是太麻烦了。可以说配置中心并不是微服务独有的。基于以上原因我提炼了一些配置中心必备的功能,做的尽量简单(陋),开发了AgileConfig,为.net core的生态尽一份绵薄之力。 Github求star: AgileConfig

asp.net core中负载均衡场景下http重定向https的问题

依然范特西╮ 提交于 2020-08-15 10:04:50
原文: asp.net core中负载均衡场景下http重定向https的问题 上周欣喜地发现,微软官方终于针对 asp.net core 在使用负载均衡的情况下从 http 强制重定向至 https 的问题提供了解决方法。 app.UseForwardedHeaders( new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedProto }); var options = new RewriteOptions() .AddRedirectToHttpsPermanent(); app.UseRewriter(options); 但实际使用之后,欣喜变成了失望 —— 微软对这个问题的认识角度和我们不一样,造成这个方法对我们不适用,不得不继续使用我们的土方法。 为什么会这样?请看下面的分解。 AddRedirectToHttpsPermanent 早就在 BasicMiddleware 的 RedirectToHttpsRule 中实现了,它的逻辑很简单 —— 判断当前请求是否是https,如果不是就进行重定向。 if (! context.HttpContext.Request.IsHttps) { // ... } 这个直接了当的判断在使用负载均衡的场景下不仅不会发挥应有的作用

【无私分享:ASP.NET CORE 项目实战(第七章)】文件操作 FileHelper

与世无争的帅哥 提交于 2020-08-15 09:24:17
原文: 【无私分享:ASP.NET CORE 项目实战(第七章)】文件操作 FileHelper 目录索引   【无私分享:ASP.NET CORE 项目实战】目录索引 简介   在程序设计中,我们很多情况下,会用到对文件的操作,在 上一个系列 中,我们有很多文件基本操作的示例,在Core中有一些改变,主要是我们常用的Server.MapPath()不存在了,不知道后续的版本会不会有,在这里,我们只能自己封装方法去实现。今天,我们就对一些基本的操作写了一个 FileHelper 类,供大家探讨。在此要感谢以为不愿意透漏姓名的大神的帮助: @YINYEJUN 获取文件的绝对路径    在以前的操作中,这个应该是十分简单的,可以通过 System.Web.HttpContext.Current.Server.MapPath("...") 直接获取,简介中,我们讲过,这个方法已经不存在了,网上翻阅了很多资料,Server.MapPath 最终调用 HostingEnvironment.MapPath() ,但是,它创建了一个特定选项的 virtualpath 对象,我们暂时先不管这些原理性的东西,我们看下如何去实现。      我们这里需要用到 IHostingEnvironment ,注入的方式有很多, 最推荐的 是 构造器 的注入,例如:       public readonly

ASP.NET Core 使用 AutoFac 注入 DbContext

偶尔善良 提交于 2020-08-15 08:56:02
原文: ASP.NET Core 使用 AutoFac 注入 DbContext DI 1.0 —— 通过 RegisterInstance 注入 一开始,并不是很懂 AutoFac 的用法,又因为要使用特定的构造器和参数来初始化 DbContext ,所以我想到的办法就是使用 RegisterInstance ,代码如下: var optionsBuilder = new DbContextOptionsBuilder<BookListDbContext>(); optionsBuilder.UseMySql(connectionString, b => b.MigrationsAssembly( "BookList.Domain" )); // SingleInstance 就是单例模式,现在想起来当时写的好智障 containerBuilder.RegisterInstance( new BookListDbContext(optionsBuilder.Options)).SingleInstance(); 一开始在本地用 Swagger 一个一个的调试 api 的感觉还很好,没啥问题,后来前端同学把 js 加上,就会经常的出现 404。经过 debug 发现,是 DbContext 出现了冲突,多个请求同时访问同一个 DbContext 对象,造成异常

dotnet C# 如何让 Json 序列化数组时序列化继承类的属性

橙三吉。 提交于 2020-08-15 05:47:16
如果我使用的是具体的数组而我的数组是基类数组,而我传入子类的元素进行 json 序列化,可能发现 Json.NET 序列化没有包含子类元素的属性。如果要包含子类的属性或字段,可以在序列化的类数组定义为 object 数组的方式 我在用 WPF 写一个复杂的应用,我需要 ASP.NET Core 后台传输一个 AppData 类的数组,包含的属性如下 public class Lindexi { public string Name { set; get; } } 然后我有 Foo 类继承 Lindexi 类 public class Foo : Lindexi { public string F1 { set; get; } } 用下面代码序列化 static void Main(string[] args) { Console.WriteLine(ToString(new Foo() { F1 = "林德熙是逗比" })); } static string ToString(Lindexi lindexi) { return JsonSerializer.Serialize(new [] { lindexi }); } 运行可以看到输出 [{"Name":null}] 也就是 Foo 的属性被丢失了,在 .NET Core 3.0 可以使用 System.Text.Json

.NET Core技术研究系列-索引篇

♀尐吖头ヾ 提交于 2020-08-15 03:17:41
随着.NET Core相关技术研究的深入,现在将这一系列的文章,整理到一个索引页中,方便大家翻阅查找,同时,后续也会不断补充进来。 .NET Core技术研究-WebApi迁移ASP.NET Core2.0 .NET Core技术研究-Span<T>和ValueTuple<T> .NET Core技术研究-EntityFramework Core 3.0 Preview .NET Core技术研究-ConfigurationManager在单元测试下的坑 .NET Core技术研究-一套代码同时支持.NET Framework和.NET Core .NET Core技术研究-.NET Core迁移前的准备工作 .NET Core技术研究-HttpContext访问的正确姿势 .NET Core技术研究-最实用最常用的配置读取方式 .NET Core技术研究-中间件的由来和使用 .NET Core技术研究-主机Host ASP.NET Core技术研究-探秘Host主机启动过程 ASP.NET Core技术研究-探秘依赖注入框架 ASP.NET Core技术研究-全面认识Web服务器Kestrel .NET Core技术研究-通过Roslyn代码分析技术规范提升代码质量 .NET 5 Preview 1的深度解读和跟进 .NET Core相关技术研究文章,持续更新中。 周国庆