1..NET Core/.NET 开源项目汇总:WPF组件库
2..NET core扫盲
3..NET/.NET Core相关面试题
4..NET Core 使用 ImageSharp 生成
5..NETå¹³å°ç³»å6 .NET Core åå±åç¨
6.ASP.NET Core认è¯åçåå®ç°
.NET Core/.NET 开源项目汇总:WPF组件库
WPF,源源码作为Windows Presentation Foundation,源源码是源源码微软提供的一个用户界面框架,属于.NET Framework 3.0的源源码一部分,旨在提供统一的源源码编程模型、语言和框架,源源码车辆年检系统源码实现界面设计人员与开发人员工作的源源码分离,同时提供全新的源源码多媒体交互用户图形界面。然而,源源码尽管微软提供的源源码WPF控件功能强大,但其样式可能并不尽如人意,源源码需要专业的源源码美工进行设计或定制。因此,源源码开源社区中涌现了众多无私奉献的源源码大牛分享出既美观又实用的WPF组件库,为开发者提供了丰富的源源码选择。以下是几款优秀的开源WPF组件库,供您参考。 一、MaterialDesignInXAML MaterialDesignInXAML是一个完全开源的WPF GUI库,它与MahApps和Dragablz兼容,提供了一套现代流行的设计语言,使得开发人员能够轻松地将美观的桌面应用程序带入生活。该库提供了丰富的组件和功能,包括: 首页:布局简洁、清爽,效果直观。 支持主题风格切换:库内包含数十种颜色风格,满足大部分配色要求,同时支持自定义皮肤。神马视频打赏源码带资源 按钮:提供多种形状的交互按钮,如圆形按钮、图标按钮、按钮进度、按钮文字提示等,使Web中的常见效果在WPF中也能轻松实现。 输入验证框:实现了多种验证器,简化了表单验证的代码,同时提供了友好的界面提示。 标签:控件支持英文Chips,用于显示标签,特别适用于显示大量数据时,可通过点击进行过滤。 卡片:卡片式布局,用于显示数据,提供更生动、友好的展示方式,支持+文字的形式。 图标:提供了成百上千种矢量图标供选择,方便用于菜单图标、按钮图标等。 分组框:类似卡片的组合框,允许自定义Header,并支持添加。 进度条:提供多种样式,适用于不同需求,使得调整进度条各个部分变得简单。 对话框:遮罩式对话框,82的源码反码补码是多少支持整个窗体遮罩或窗体部分用户控件对话框,实用性高。 抽屉:支持从东、南、西、北四个方向打开抽屉,用于提供额外的功能或内容。 提示信息:提供了一种不弹框的提示方式,用于显示不需要用户操作的即时信息。 二、MahApps.Metro Metro是一个允许开发人员为WPF应用程序设计Metro或现代UI的框架。它重写了所有常见WPF控件的默认样式,提供了现代外观,并包含了一些基于WindowsPhone、Windows8和Windows(UWP)应用程序概念的自定义控件。MahApps.Metro的源代码托管在GitHub上,易于访问和改进。 三、AduSkin AduSkin是一款简单美观的WPF UI库,融合了多个开源框架组件,为个人定制UI提供了丰富选项。它支持动态修改皮肤,提供大量产品示例,供学者参考和使用。AduSkin的官方网站和开源地址均在GitHub上,方便开发者获取和使用。.NET core扫盲
.NET发行至今已经过了十四个年头。随着版本的更改窗口类名源码易语言不断迭代更新,.NET在Windows平台上的表现也是越来越好,可以说Windows平台上所有的应用类型.NET几乎都能完成。只是成也Windows,败也Windows,这十四年来,除了部分“民间”版本,.NET一直没能在官方支持下摆脱Windows平台的局限,“开源”和“跨平台”这两个词语也是所有.NET开发者心中的痛楚。最终,.NET Core出现了,它让开发者们在官方和社区的支持走出了Windows,可以在macOS,Linux主流distributions上编写调试并部署.NET程序。
.NET Core是一个开源通用的开发框架,支持跨平台,即支持在Window,macOS,Linux等系统上的开发和部署,并且可以在硬件设备,云服务,和嵌入式/物联网方案中进行使用。.NET Core的源码放在 GitHub上,由微软官方和社区共同支持。它和传统的.NET Framework,属于“子集—超集”的关系,或者你也可以简单地认为它就是.NET Framework的跨平台版本(基于 BCL的层面上看)。这是因为在当前版本中(1.0),.NET Core中的怎么在手机上打开源码大部分核心代码都是从.NET Framework中继承重写的,包括Runtime和Libraries(如GC, JIT, 部分类型)。
现在的.NET Core 1.0版本是一个很小的核心,APIs和工具也并不完整,但是随着.Net Core的不断完善,补充的Apis和创新也会一起整合到.NET Framework中。也就是说,.NET Core微软会同时更新.NET Framework和.NET Core,他们就像俩兄弟,共同努力致富(致谁的富?当然是.NET开发者们),实现所谓的天下大同,也就是 .NET 标准2.0
这里不得不提到一个叫做 .NET Standard Library概念。作为.NET平台APIs开发官方支持标准,它要求所有的.NET框架APIs都遵循向下兼容。比如说.NET Framwork 4.6支持.NET Standard Library 1.3,.NET Framwork 4.6.2框架支持.NET Standard Library 1.5,而.NET Core 1.0框架支持1.6标准。
Tips:是不是想起了MSCorEE.dll这个垫片,它同样承载着Windows平台上为.NET应用程序选择CLR版本的工作
第二种方式和.NET Native也是不一样的,仍然使用CoreCLR,而.NET Native使用CoreRT作为运行时,详细信息请见 dotnet/corert
.NET Core 1.0版本中支持的编程语言仅有C#(F#和VB暂未实现),这里还要提到一个开源的语言编译器Roslyn,它负责将代码编译成我们熟悉的IL语言,然后再借由AOT或JIT编译器编译成机器熟悉的机器语言。
以下内容演示在Windows和CentOS 7.2下的命令行生成和发布demo
3.1 Win
3.1.1 安装 .NET Core SDK和 .NET Core Runtime .NET Core SDK = 使用.NET Core开发应用.NET Core Runtime 和 SDK+CLI 工具
3.1.2 简单的运行结果 打开cmd,依次输入mkdir .project(创建目录),cd .\.project(进入目录),dotnet new(新建初始项目),dotnet restore(还原依赖),dotnet run(运行)即可运行第一个Hello World程序
3.2 CentOS 7.2(本地Hyper-V)
3.2.1 安装和运行 详情请见: .NET Core in CentOS,大致命令如下
第六行命令后可使用dotnet --info查看是否链接成功,显示如下
以上步骤在.NET Core官方网站都可以找到,可以看到应用在经过简单的dotnet new, dotnet restore, dotnet run命令后就跑起来了,但是这其实是类似于开发环境中的调试运行,而且win上new的应用此时也不能直接跨平台到Linux下运行,所以我们又得提到dotnet publish命令了
3.2.2 Self-contained applications 发布 (1) 修改project.json文件 我们现在win下按照步骤new一个新的HW控制台应用self,按照 官方文档要求,我们需要用以下内容替换原来project.json文件(删除"type": "platform",并增加runtimes节点)
(2) 执行restore和publish操作
之后执行dotnet restore指令,针对平台进行还原操作。该步操作耗时较久,虽然只是两个平台,第一次也花了较长时间。紧接着进行进行dotnet publish -r centos.7-x -c release。
dotnet publish指令详见 dotnet-publish - Packs the application and all of its dependencies into a folder getting it ready for publishing (3) 在Linux平台上运行
上述操作后,我们只需要将发布后的文件夹(bin/release/netcoreapp1.0/centos7-x/publish,包含self.exe)上传到Linux root目录下project(新建)文件夹中, 在Shell中输入指令
修改可执行权限后,即可成功运行“Hello World”,这就是我们“Self-contained applications”方式的部署方法
至此,.NET Core的学习便告一段落了,以上内容简单介绍了.NET Core的组成和特性,同时也在Windows和Linux系统上通过两种不同的部署方式成功运行了示例。相比较之前的.NET Framework傻瓜式部署,.NET Core的新奇真是让我眼前一亮。接下来,我也会将.NET Core和 ASP.NET Core的学习记录下来,欢迎指正。
4.2 相关学习资料
5. 参考资料
.NET/.NET Core相关面试题
ASP.NET 是由 Microsoft 创建的开放源代码 Web 框架,用于生成基于 .NET 的现代 Web 应用和服务。ASP.NET Core 则是一个开源、跨平台、高性能框架,具备更精简、易配置、模块化和高扩展性。
.NET 支持多种编程语言,具体详情请查阅相关文档。
选择 ASP.NET Core 的原因包括其轻量级、模块化设计以及为开发人员提供了更多控制和灵活性。
ASP.NET Core 是 ASP.NET 4.x 的重设计,带来了更优化的架构与性能提升。
托管资源由 CLR 管理分配和释放,而非托管资源不受 CLR 控制,包括操作系统接口和第三方库资源。
GC 是 .NET Framework 的垃圾回收器,负责管理内存分配和释放。它在新对象创建时分配内存,并在内存资源充足时执行回收,释放不再使用的对象内存。
.NET 的垃圾回收机制确保程序资源高效管理,避免内存泄漏。
IDisposable 接口用于管理非托管资源的生命周期,实现资源的释放。
在 .NET 中,所有类的基类为 Object。
.NET 中实现深拷贝通常通过实现 ICloneable 接口来完成。
ICloneable 接口支持对象克隆,允许创建现有实例的副本。
依赖注入(DI)和面向服务(IoC)容器帮助管理类间依赖,确保代码可维护和扩展。
默认服务容器在 .NET Core 中由 Microsoft.Extensions.DependencyInjection 提供。
使用第三方容器替代内置容器,主要是为了获得特定功能支持,如更复杂的依赖管理。
在 .NET Core 中,服务生命周期分为三种:Singleton(单例)、Scoped(范围)和 Transient(临时)。
中间件是 .NET Core 应用中用于处理请求和响应的组件,通过请求管道实现。注册中间件有多种方法,最常见的使用 Use() 助手函数。
中间件执行顺序由开发者控制,以满足特定应用需求。
Startup 类包含两个关键方法:Configure 和 ConfigureServices,用于配置应用和服务。
.NET Core 中的五大过滤器包括:授权过滤器、资源过滤器、操作过滤器、结果过滤器和异常过滤器,分别用于权限控制、页面缓存、方法执行前与后处理、结果处理和全局异常捕获。
.NET Core Filter 的注册方式包括在 Startup 类的 ConfigureServices 方法中配置过滤器。
.NET Core 3.1 升级到 .NET 5 提供了更现代化的语言特性和性能改进。
获取 C#/.NET/.NET Core 面试宝典,欢迎关注微信公众号:追逐时光者,回复关键字面试,获取语雀在线免费的面试宝典。
不断学习以提升技能,不仅是为面试准备,更是为个人知识增长和团队进步贡献力量。
.NET Core 使用 ImageSharp 生成
ImageSharp 是对 .NET Core 平台的图像处理扩展,旨在提供高效且易于使用的图像操作功能。以往的案例常聚焦于生成文字、绘制简单图形、制作验证码等,但实际项目中,ImageSharp 的应用更为广泛。
在公司项目中,我们应用了ImageSharp 来生成微信二维码和圆形头像。要开始,首先通过以下地址获取源码:github.com/SixLabors/Im...
安装所需的包如下:
Install-Package SixLabors.ImageSharp -Version 1.0.0-beta
Install-Package SixLabors.ImageSharp.Drawing -Version 1.0.0-beta
接下来,具体应用方法包括:
1. 在上绘制文字:要处理文字,需注意字体问题。一般情况下,Windows 下的字体文件位于 C:\Windows\Fonts 文件夹,而 Linux 系统下则在/usr/share/fonts。以黑体为例,我们将其字体文件 SIMHEI.TTF 放入项目根目录以方便调用。获取文字的像素宽度,可通过特定方法实现。
2. 生成圆形头像:ImageSharp 提供了绘制圆形的工具类,直接使用即可。在已有上画出圆形头像,只需调用 ConvertToAvatar 方法,将方形转化为圆形并绘制。
3. 处理二维码:以微信二维码为例,项目中通过从微信公众号平台 API 获取二维码。为处理 BitMatrix 类型的二维码,我们将其转换为流格式,以便通过 Image.Load 方法获取信息。为了兼容性,将数据流中的 byte 数据实例化为 MemoryStream 类型,确保能够顺利加载处理后的流。
以上是使用 ImageSharp 在 .NET Core 平台生成的实用案例,通过实例操作,有效实现了特定需求。更多关于 ImageSharp 的资料、教程及源码,可自行访问指定链接获取。
.NETå¹³å°ç³»å6 .NET Core åå±åç¨
æ¬ç³»åææ¯å¤§çº¦ç¯æç« ï¼æ¬¢è¿å ³æ³¨ãç¹èµãè¯è®ºã转åï¼æ¯å¤©é½è½è·åITä¼è´¨å 容ã.NET Core åç¨
以ä¸å 容æ¥èªå¾®è½¯.NETå¢éï¼
ã大约两年åï¼æ们å¼å§æ¶å°ä¸äºASP.NET客æ·å¯¹äº.NET å¨Linuxç³»ç»ä¸ç请æ±ãå¨åä¸æ¶æï¼æ们å¼å§ä¸Windows Server Teamè®¨è®ºå ³äºWindows Nanoï¼å®ä»¬çæªæ¥åä¸äºè¾å°çæå¡å产åãç»æï¼æ们å¼å§äºä¸ä¸ªæ°ç代å·ä¸ºâProject Kâé¢åæ°å¹³å°ç.NET项ç®ãæ们沿çä¸æ¡çº¿å¤æ¬¡æ´æ¹å称ãå¤è§åä½éªï¼å¨æ¯æ¬¡è¿è¡è¿ç¨é½å°½é让å®æ´å®åï¼éç¨äºæ´å¤æ åµåæ´å¤çåºç¡å¼å人åãé常é«å ´è¿ä¸ªé¡¹ç®æç»æ为å¯ç¨ç.NET CoreåASP .NET Core 1.0ã
ããå¼æºä»£ç æ¯è¿ä¸ªé¡¹ç®å¦å¤ä¸ä¸ªéè¦ç主é¢ãéçæ¶é´çæ¨ç§»ï¼æ们注æå°ææç主æµç½ç»å¹³å°é½æ¯å¼æºä»£ç ãASP.NET MVCå·²ç»å¼æ¾æºä»£ç å¾é¿æ¶é´äºï¼ä½å®ä¸é¢çå¹³å°ï¼.NET Framework并没æå¼æ¾æºä»£ç ã对äºé£äºéå¸¸å ³å¿å¼æºä»£ç ï¼ä»¥å认为MVCçå¼æºä¸å¤å ¨é¢çå¼å人åï¼æ们并没æç»åºåçãéçä»å¤©çåå¸ï¼ASP.NET Coreæ¯ä¸ä¸ªèªä¸èä¸çå¼æºç½ç»å¹³å°ãçè³ææ¡£ä¹æ¯å¼æºçï¼å¯¹äºä»»ä½ä¸ä¸ªå¯¹ä»ä»¬çç½ç»åè®®æ æå¼æºä»£ç éæ±ç人æ¥è¯´ASP.NET Coreé½æ¯ä¸ä¸ªä¸éçéæ©ã
ããææ³å¯¹æ¯ä¸ªå·²ç»å°è¯.NET CoreåASP.NET Core并ä¸ç»æ们åé¦ç人表示æ们çææ¿ä¹æ ãæ们ç¥éæåä¸ä¸ç人已ç»ä½¿ç¨è¿å åç1.0产åï¼è°¢è°¢ï¼æ们已ç»æ¶å°è®¸å¤å ³äºäº§å设计éæ©ï¼ç¨æ·ä½éªãæ§è½ãéä¿¡åå ¶ä»ä¸»é¢çåé¦ãæ们尽æ们æ大çåªåååºäºææçåé¦ãæäºè¿äºåé¦è¿æ¬¡åå¸æè½æ´å æåã没æä½ ä»¬æ们ä¸å¯è½å®æå®ã谢谢ï¼
ããå¦æä½ ä¸æ¯ä¸å.NETå¼åè æè 没æåºç¨è¿.NETï¼ç°å¨æ£æ¯å°è¯å®ç好æ¶æºãä½ å¯ä»¥å¨ä»»ä½æä½ç³»ç»ä¸ãç¨ä»»ä½å·¥å ·ï¼å¯¹äºä»»æä¸ä¸ªåºç¨æå.NET没æéå¶çç产åååéãææçå¼æºä»£ç ï¼é½å¾åäºç¤¾åºå微软çæ¯æï¼æ¥çdot.netäºè§£.NETæä½èå´ãã
ããå¨æçä¸ä¸ç¯å客ã.NETå¹³å°ç³»å5 .NET Core ç®ä»ãä¸ä¸»è¦ä»ç»äº.NETCoreçåºæ¬æ åµï¼ä¸»è¦å æ¬.NET跨平å°çç¼ç±ã.NET Coreçå®ä¹ã.NET Coreçæ ¸å¿åè½ã.NET Coreçå 管çã.NET Core æ§è¡çåºç¨ç¨åºç±»åã.NET Core ä¸å ¶ä»å¹³å°çå ³ç³»ã.NET Core æ¯æçæä½ç³»ç»ã.NET Core æ¯æå¼åçåºç¨çã微软.NETå®ä¼ç®æ å°åºåå±çå¦ä½ï¼é¦å éè¿ä¸é¢çä¸å¹ å¾å¯ä»¥ç´è§å°äºè§£ã
ããå¹´2æ4æ¥ï¼å¾®è½¯äºè®¡ç®äºä¸é¨å¯æ»è£ è¨æäºÂ·çº³å¾·æ åºä»»å¾®è½¯ç¬¬ä¸ä»»CEOï¼æ¹å微软ä¼ä¸æåï¼å¼å§å¼æºãæ¥æ±Linuxã年微软对.NETå¹³å°è¿è¡äºéæ°è®¾è®¡ä¸æ¶æã
ããå¹´6ææ¥ï¼.NET Core1.0 项ç®æ£å¼åå¸ï¼å½»åºæ¹åäº Windows Only çåºæ¯ï¼æ¥æ±å¼æºãåæ¶ä¹å¾å°äºå ¨ä¸çå¼åè çåç±ä¸æ¯æï¼å¾å¤é¡¶çº§å¤§ç为.NET Coreè´¡ç®ä»£ç ï¼åå±éå¸¸è¿ éï¼é¡ºå¿æ¨åºäº.NET Core1.1ã.NET Core2.0ã.NET Core2.1ã.NET Core2.2ã.NET Core3.0ã.NET Core 3.1ã.NET5ï¼ææ°æ¨åº.NET 6é¢è§çï¼é¢è®¡å°å¹´æï¼æ£å¼åå¸.NET6ã
.NET Core çæ¬æ¯æ
ããä»å¾®è½¯å®ç½ /download/dotnet å¯ä»¥äºè§£å°ï¼.NETå¢éå°å¹´8ææ¥å°åæ¢æ¯æ.NET Core 2.1 çæ¬ãå°å¹´æ3æ¥å°åæ¢æ¯æ.NET Core 3.1çæ¬ã.NET5.0 æ¯ç®å微软æ¨èçå¯ç¨äºç产ç¯å¢çææ°çæ¬ï¼.NET6.0ç®åå¤äºé¢è§çæ¬ï¼ä¸ªäººå¦ä¹ å¯ä»¥ä½¿ç¨ï¼ä¸å»ºè®®ç¨å°ç产ç¯å¢ï¼å¾ 6.0æ£å¼çåå¸åï¼åºäº.NET Core 3.1 æè .NET 5.0ç项ç®å¯ä»¥æ ç¼è¿ç§»å°.NET 6.0ã
æ¬ç³»åææ¯å¤§çº¦ç¯æç« ï¼æ¬¢è¿å ³æ³¨ãç¹èµãè¯è®ºã转åï¼æ¯å¤©é½è½è·åITä¼è´¨å 容ã
#å½é ä½æåä¼è§£éæ¡¥æ¬å¤§è¾è·³é©¬æå#
#å京ãå¼ å®¶çæå½¢æç«æ ä¼ æåä¸å¿#
#åå¾·åæé³çæ人æ°ç ´äº¿#
#é»ææç¥è´ºè¡¨å¦¹é梦è·å¥³ä¹å å#
#å京ç«æ å·²è延è³çå¸#
ASP.NET Core认è¯åçåå®ç°
é常å¨åºç¨ç¨åºä¸ï¼å®å ¨å为åå两个æ¥éª¤ï¼éªè¯åææãéªè¯è´è´£æ£æ¥å½å请æ±è ç身份ï¼èææåæ ¹æ®ä¸ä¸æ¥å¾å°ç身份å³å®å½å请æ±è æ¯å¦è½å¤è®¿é®ææçèµæºã
æ¢ç¶å®å ¨ä»éªè¯å¼å§ï¼æ们ä¹å°±ä»éªè¯å¼å§ä»ç»å®å ¨ã
æ们å ä»æ¯è¾ç®åçåºæ¯å¼å§èèï¼ä¾å¦å¨ Web API å¼åä¸ï¼éè¦éªè¯è¯·æ±æ¹æ¯å¦æä¾äºå®å ¨ä»¤çï¼å®å ¨ä»¤çæ¯å¦ææãå¦ææ æï¼é£ä¹ API 端åºè¯¥æç»æä¾æå¡ãå¨å½åç©ºé´ Microsoft.AspNetCore.Authentication ä¸ï¼å®ä¹å ³äºéªè¯çæ ¸å¿æ¥å£ã对åºçç¨åºéæ¯ Microsoft.AspNetCore.Authentication.Abstractions.dllã
å¨ ASP.NET ä¸ï¼éªè¯ä¸å å« 3 个åºæ¬æä½ï¼
éªè¯æä½è´è´£åºäºå½å请æ±çä¸ä¸æï¼ä½¿ç¨æ¥èªè¯·æ±ä¸çä¿¡æ¯ï¼ä¾å¦è¯·æ±å¤´ãCookie ççæ¥æé ç¨æ·æ è¯ãæ建çç»ææ¯ä¸ä¸ª AuthenticateResult 对象ï¼å®æ示äºéªè¯æ¯å¦æåï¼å¦ææåçè¯ï¼ç¨æ·æ è¯å°å¯ä»¥å¨éªè¯ç¥¨æ®ä¸æ¾å°ã
常è§çéªè¯å æ¬ï¼
å¨ææ管çé¶æ®µï¼å¦æç¨æ·æ²¡æå¾å°éªè¯ï¼ä½æææ访é®çèµæºè¦æ±å¿ é¡»å¾å°éªè¯çæ¶åï¼æææå¡ä¼ååºè´¨è¯¢ãä¾å¦ï¼å½å¿åç¨æ·è®¿é®åéèµæºçæ¶åï¼æè å½ç¨æ·ç¹å»ç»å½é¾æ¥çæ¶åãæææå¡ä¼éè¿è´¨è¯¢æ¥ç¸åºç¨æ·ã
ä¾å¦
质询æä½åºè¯¥è®©ç¨æ·ç¥éåºè¯¥ä½¿ç¨ä½ç§éªè¯æºå¶æ¥è®¿é®è¯·æ±çèµæºã
å¨ææ管çé¶æ®µï¼å¦æç¨æ·å·²ç»éè¿äºéªè¯ï¼ä½æ¯å¯¹äºå ¶è®¿é®çèµæºå¹¶æ²¡æå¾å°è®¸å¯ï¼æ¤æ¶ä¼ä½¿ç¨æç»æä½ã
ä¾å¦ï¼
æç»è®¿é®å¤çåºè¯¥è®©ç¨æ·ç¥éï¼
å¨è¿ä¸ªåºæ¯ä¸ï¼å¯ä»¥çå°ï¼éªè¯éè¦æä¾çåºæ¬åè½å°±å æ¬äºéªè¯åéªè¯å¤±è´¥åçæç»æå¡ä¸¤ä¸ªæä½ãå¨ ASP.NET Core ä¸ï¼éªè¯è¢«ç§°ä¸º Authenticateï¼æç»è¢«ç§°ä¸º Forbidã å¨ä¾æ¶è´¹è 访é®çç½ç«ä¸ï¼å¦ææ们å¸æå¨éªè¯å¤±è´¥åï¼ä¸æ¯å API ä¸æ ·ç´æ¥è¿åä¸ä¸ªé误页é¢ï¼èæ¯å°ç¨æ·å¯¼èªå°ç»å½é¡µé¢ï¼é£ä¹ï¼å°±è¿éè¦å¢å ä¸ä¸ªæä½ï¼è¿ä¸ªæä½çæ¬è´¨æ¯å¸æç¨æ·å次æä¾å®å ¨åæ®ï¼å¨ ASP.NET Core ä¸ï¼è¿ä¸ªæä½è¢«ç§°ä¸º Challengeãè¿ 3 个æä½ç»åå¨ä¸èµ·ï¼å°±æ¯éªè¯æåºæ¬çè¦æ±ï¼ä»¥æ¥å£å½¢å¼è¡¨ç¤ºï¼å°±æ¯ IAuthenticationHandler æ¥å£ï¼å¦ä¸æ示ï¼
éªè¯çç»ææ¯ä¸ä¸ª AuthenticateResult 对象ãå¼å¾æ³¨æçæ¯ï¼å®è¿æä¾äºä¸ä¸ªéææ¹æ³ NoResult() ç¨æ¥è¿å没æå¾å°ç»æï¼éææ¹æ³ Fail() çæä¸ä¸ªè¡¨ç¤ºéªè¯å¼å¸¸çç»æï¼è Success() æååéè¦æä¾éªè¯ç¥¨æ®ã
éè¿éªè¯ä¹åï¼ä¼è¿åä¸ä¸ªå å«äºè¯·æ±è 票æ®çéªè¯ç»æã
å¨ GitHub ä¸æ¥ç AuthenticateResult æºç
é£ä¹éªè¯çä¿¡æ¯æ¥èªåªéå¢ï¼é¤äºåé¢ä»ç»ç 3 个æä½ä¹å¤ï¼è¿è¦æ±ä¸ä¸ªåå§åçæä½ Initializeï¼éè¿è¿ä¸ªæ¹æ³æ¥æä¾å½å请æ±çä¸ä¸æä¿¡æ¯ã
å¨ GitHub ä¸æ¥ç IAuthenticationHandler å®ä¹
æçæ¶åï¼æ们è¿å¸ææä¾ç»åºæä½ï¼å¢å ç»åºæä½çæ¥å£è¢«ç§°ä¸º IAuthenticationSignOutHandlerã
å¨ GitHub ä¸æ¥ç IAuthenticationSignOutHandler æºç
å¨ç»åºçåºç¡ä¸ï¼å¦æè¿å¸ææä¾ç»å½æä½ï¼é£ä¹å°±æ¯ IAuthenticationSignInHandler æ¥å£ã
å¨ GitHub ä¸æ¥ç IAuthenticationSignInHandler æºç
ç´æ¥å®ç°æ¥å£è¿æ¯æ¯è¾éº»ç¦çï¼å¨å½åç©ºé´ Microsoft.AspNetCore.Authentication ä¸ï¼å¾®è½¯æä¾äºæ½è±¡åºç±» AuthenticationHandler 以æ¹ä¾¿éªè¯æ§å¶å¨çå¼åï¼å ¶å®æ§å¶å¨å¯ä»¥ä»è¯¥æ§å¶å¨æ´¾çï¼ä»¥åå¾å ¶æä¾çæå¡ã
éè¿ç±»çå®ä¹å¯ä»¥çå°ï¼å®ä½¿ç¨äºæ³åãæ¯ä¸ªæ§å¶å¨åºè¯¥æä¸ä¸ªå¯¹åºè¯¥æ§å¶å¨çé ç½®é项ï¼éè¿æ³åæ¥æå®éªè¯å¤çå¨æ使ç¨çé 置类åï¼å¨æé å½æ°ä¸ï¼å¯ä»¥çå°å®è¢«ç¨äºè·å对åºçé ç½®é项对象ã
å¨ GitHub ä¸æ¥ç AuthenticationHandler æºç
éè¿ InitializeAsync()ï¼éªè¯å¤çå¨å¯ä»¥è·å¾å½å请æ±çä¸ä¸æ对象 HttpContextã
æç»ï¼ä½ä¸ºæ½è±¡ç±»ç ï¼å¸ææ´¾çç±»æ¥å®æè¿ä¸ªéªè¯ä»»å¡ï¼æ½è±¡æ¹æ³ HandleAuthenticateAsync() æä¾äºæ©å±ç¹ã
éªè¯çç»ææ¯ä¸ä¸ª AuthenticateResultã
èæç»æå¡åç®åçå¤ï¼ç´æ¥å¨è¿ä¸ªæ½è±¡åºç±»ä¸æä¾äºé»è®¤å®ç°ãç´æ¥è¿å HTTP ã
å©ä¸çä¸ä¸ªä¹ä¸æ ·ï¼æä¾äºé»è®¤å®ç°ãç´æ¥è¿å HTTP ååºã
å¯¹äº JWT æ¥è¯´ï¼å¹¶ä¸æ¶åå°ç»å ¥åç»åºï¼æ以å®éè¦ä»å®ç° IAuthenticationHandler æ¥å£çæ½è±¡åºç±» AuthenticationHandler æ´¾çåºæ¥å³å¯ãä» AuthenticationHandler æ´¾çåºæ¥ç JwtBearerHandler å®ç°åºäºèªå·±çé ç½®é项 JwtBearerOptionsãæ以该类å®ä¹å°±åå¾å¦ä¸æ示ï¼èæé å½æ°æ¾ç¶é åäºæ½è±¡åºç±»çè¦æ±ã
å¨ GitHub ä¸æ¥ç JwtBearerHandler æºç
çæ£çéªè¯åå¨ HandleAuthenticateAsync() ä¸å®ç°ãä¸é¢ç代ç æ¯ä¸æ¯å°±å¾çæäºï¼ä»è¯·æ±å¤´ä¸è·åé带ç JWT 访é®ä»¤çï¼ç¶åéªè¯è¯¥ä»¤ççæææ§ï¼æ ¸å¿ä»£ç å¦ä¸æ示ã
å¨ GitHub ä¸æ¥ç JwtBearerHandler æºç
å¨ ASP.NET Core ä¸ï¼ä½ å¯ä»¥ä½¿ç¨åç§éªè¯å¤çå¨ï¼å¹¶ä¸ä» ä» åªè½ä½¿ç¨ä¸ä¸ªï¼éªè¯æ§å¶å¨éè¦ä¸ä¸ªå称ï¼å®è¢«çä½è¯¥éªè¯æ¨¡å¼ Schema çå称ãJwt éªè¯æ¨¡å¼çé»è®¤åç§°å°±æ¯ "Bearer"ï¼éè¿å符串常é JwtBearerDefaults.AuthenticationScheme å®ä¹ã
å¨ GitHub ä¸æ¥ç JwtBearerDefaults æºç
æç»éè¿ AuthenticationBuilder çæ©å±æ¹æ³ AddJwtBearer() å° Jwt éªè¯æ§å¶å¨æ³¨åå°ä¾èµæ³¨å ¥ç容å¨ä¸ã
å¨ GitHub ä¸æ¥ç JwtBearerExtensions æ©å±æ¹æ³æºç
ä¸ç§éªè¯å¤çå¨ï¼å ä¸å¯¹åºçéªè¯é ç½®é项ï¼æ们å为å®èµ·ä¸ä¸ªååï¼ç»åèµ·æ¥å°±æ为ä¸ç§éªè¯æ¶æ Schemaãå¨ ASP.NET Core ä¸ï¼å¯ä»¥æ³¨åå¤ç§éªè¯æ¶æãä¾å¦ï¼ææçç¥å¯ä»¥ä½¿ç¨æ¶æçå称æ¥æå®æ使ç¨çéªè¯æ¶ææ¥ä½¿ç¨ç¹å®çéªè¯æ¹å¼ãå¨é ç½®éªè¯çæ¶åï¼é常设置é»è®¤çéªè¯æ¶æãå½æ²¡ææå®éªè¯æ¶æçæ¶åï¼å°±ä¼ä½¿ç¨é»è®¤æ¶æè¿è¡å¤çã
è¿å¯ä»¥
注åçéªè¯æ¨¡å¼ï¼æç»åæ AuthenticationSchemeï¼æ³¨åå°ä¾èµæ³¨å ¥æå¡ä¸ã
å¨ GitHub ä¸æ¥ç AuthenticationScheme æºç
åç§éªè¯æ¶æ被ä¿åå°ä¸ä¸ª IAuthenticationSchemeProvider ä¸ã
å¨ GitHub ä¸æ¥ç IAuthenticationSchemeProvider æºç
æç»ç使ç¨æ¯éè¿ IAuthenticationHandlerProvider æ¥å®ç°çï¼éè¿ä¸ä¸ªéªè¯æ¨¡å¼çå符串å称ï¼å¯ä»¥åå¾æ对åºçéªè¯æ§å¶å¨ã
å¨ GitHub ä¸æ¥ç IAuthenticationHandlerProvider æºç
å®çé»è®¤å®ç°æ¯ AuthenticationHandlerProviderï¼æºç 并ä¸å¤æã
å¨ GitHub ä¸æ¥ç AuthenticationHandlerProvider æºç
éªè¯ä¸é´ä»¶çå¤ç就没æé£ä¹å¤æäºã
æ¾å°é»è®¤çéªè¯æ¨¡å¼ï¼ä½¿ç¨é»è®¤éªè¯æ¨¡å¼çå称åå¾å¯¹åºçéªè¯å¤çå¨ï¼å¦æéªè¯æåçè¯ï¼æå½å请æ±ç¨æ·ç主ä½æ¾å°å½å请æ±ä¸ä¸æç User ä¸ã
éé¢è¿æä¸æ®µç¹å«ç代ç ï¼ç¨æ¥æ¾åºåªäºéªè¯å¤çå¨å®ç°äº IAuthenticationHandlerProviderï¼å¹¶ä¾æ¬¡è°ç¨å®ä»¬ï¼ççæ¯å¦éè¦æåç»æ¢è¯·æ±å¤çè¿ç¨ã
å¨ GitHub ä¸æ¥ç AuthenticationMiddle æºç