1.ASP.NET Core认è¯åçåå®ç°
2.如何在ASP.NETCore6中使用跟踪监听器
3.从分析 SkyAPM-dotnet 源码学习现代 APM 探针设计理念(一)
4..netcore有哪些不错的源码开源项目?
5.C# 有什么实用的第三方库吗?
6.asp.net core入门之Startup
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 æºç
如何在ASP.NETCore6中使用跟踪监听器
当使用ASP.NETCore6构建的应用程序时,你可能经常想使用跟踪和记录来监控你的调试应用程序的性能和诊断错误。你也可以在生产环境中使用跟踪来衡量你的源码应用程序在运行时的表现。这篇文章讨论了我们如何在ASP.NETCore6中使用追踪。调试我们将研究如何使用跟踪监听器来收集跟踪信息,源码并使用ILogger将跟踪输出引导到事件日志中。调试android webview 获取源码
要使用本文提供的源码代码示例,你的调试系统中应该安装有VisualStudio。如果你还没有副本,源码你可以在这里下载VisualStudio。调试
在VisualStudio中创建一个ASP.NETCoreWebAPI项目首先,源码让我们在VisualStudio中创建一个ASP.NETCore项目。调试按照这些步骤将在VisualStudio中创建一个新的源码ASP.NETCore6WebAPI项目。
启动VisualStudioIDE。调试
点击"创建新项目"。源码
在"创建新项目"窗口,从显示的模板列表中选择"ASP.NETCoreWebAPI"。
点击"下一步"。
在"配置你的新项目"窗口中,指定新项目的名称和位置。
根据你的喜好,可以选择勾选"将解决方案和项目放在同一目录下"复选框。
点击"下一步"。
在接下来显示的"附加信息"窗口中,确保勾选"使用控制器..."的复选框,因为我们在这个例子中不会使用最小的API。将"验证类型"保留为"无"(默认)。
确保"启用Docker"、"为HTTPS配置"和"启用开放API支持"的复选框不被选中,因为我们不会在这里使用任何这些功能。
点击创建。
我们将使用这个ASP.NETCore6WebAPI项目,在本文的后续部分使用跟踪监听器。
什么是跟踪?与追踪主要事件的事件日志相比,追踪可以更全面地了解运行中的应用程序及其组件。日志由结构化或非结构化的时间戳数据组成,显示了你的应用程序中发生的事件的记录。追踪提供了对单个请求以及它如何被处理的更多可见性。
System.Diagnostics命名空间包含Trace和Debug类。跟踪类在生产环境中使用,而调试类在开发时使用。
追踪通常包括以下三个阶段。vb字符处理源码
工具化。我们编写必要的代码来捕获相关信息
追踪。我们把跟踪信息写到指定的目标,即事件日志、文本文件、数据库表等。
分析。我们分析从跟踪中收集到的信息,以确定应用程序中的瓶颈。
什么是跟踪监听器?为什么需要它们?跟踪监听器收集跟踪信息,存储它们,并将它们引导到一个适当的目标,如文本文件。.NET提供了几种跟踪监听器,包括以下几种。
ConsoleTraceListener-将跟踪信息发送到控制台窗口。
DefaultTraceListener-将跟踪信息发送到标准调试输出。
DelimitedListTraceListener-将跟踪输出以限定的格式发送到流、流作家或文本作家。
EventLogTraceListener-发送跟踪信息到事件日志。
TextWriterTraceListener-发送跟踪信息到一个文本文件。
XmlWriterTraceListener-将跟踪信息转换为XML。
System.Diagnostics.Debug和System.Diagnostics.Trace类可以向跟踪监听器发送消息,而监听器又将消息发送到适当的目标。
在ASP.NETCore6中使用配置文件创建一个跟踪监听器你可以通过使用配置文件或编写自定义代码来创建一个跟踪监听器。下面显示的代码片断说明了如何使用你的应用程序配置文件创建一个跟踪监听器。
<configuration>所有添加到监听器集合中的监听器都会收到跟踪输出。然而,你可以使用一个监听器而不把它添加到监听器集合中。在这种情况下,你在监听器中使用Write或WriteLine方法发送输出。
下面的代码说明了一个监听器,它没有被添加到监听器集合中,但仍然能够将跟踪信息发送到输出窗口、文件或任何预先配置的输出。
TextWriterTraceListenermyFirstListener=new在ASP.NETCore6中创建一个自定义跟踪监听器在大多数情况下,.NET6默认附带的跟踪监听器将满足您的要求。然而,如果你想把你的跟踪信息输出到不同的目的地,你可以实现你自己的跟踪监听器。
要建立一个自定义的系统挂机源码软件跟踪监听器,你应该创建一个扩展TraceListener抽象类的类。在TraceListener类中有几个虚拟和抽象的方法。你至少应该实现Write和WriteLine方法。至少,你的自定义跟踪监听器应该看起来像这样。
publicclassCustomTraceListener:TraceListener所以,你的自定义跟踪监听器类必须有一个参数构造器和Write和WriteLine方法。
你还需要一个ILogger实例来代表记录器,一个记录器工厂来创建记录器,以及一个StringBuilder来存储跟踪消息,然后再将它们发送到日志目标。
privatereadonlyILoggerFactory_loggerFactory;你可以利用依赖注入的优势,在构造函数中注入ILoggerFactory的一个实例,然后使用该实例来创建ILogger的一个实例。
publicCustomTraceListener(ILoggerFactoryloggerFactory)这里是Write和WriteLine方法的一个最小实现。
publicoverridevoidWrite(string?message,string?category)ASP.NETCore6中完整的自定义跟踪监听器示例下面是我们对自定义跟踪监听器的最小实现的完整源代码,供您参考。
usingSystem.Collections.Concurrent;在Program.cs文件中注册自定义跟踪监听器要使用自定义跟踪监听器,你应该使用以下代码在监听器集合中注册它。
varloggerFactory=app.Services.GetRequiredService<ILoggerFactory>();因为我们的自定义跟踪监听器已经被添加到监听器集合中,它将捕获所有由运行时产生的跟踪消息,并将输出发送到我们的记录器。它还将发送我们在应用程序中明确发送的任何跟踪消息(就像我们在前面的myFirstListener例子中做的那样)。
因此,任何添加到监听器集合的监听器都可以捕获由运行时产生的跟踪信息,以及在应用程序中明确发送的任何跟踪信息。然而,如果一个跟踪监听器没有被添加到集合中,它只能发送应用程序中明确发送的跟踪消息。它不会捕获任何由运行时产生的跟踪消息。
当使用自定义跟踪监听器时,你必须记住关闭或刷新跟踪监听器,以确保输出缓冲区被清空。你可以利用StringBuilderCache类来优化你使用StringBuilder的代码(在CustomTraceListener类)。
从分析 SkyAPM-dotnet 源码学习现代 APM 探针设计理念(一)
在后端软件行业的快速变迁中,从SOA到微服务、从业务一体化到中台战略、从虚拟化到云原生,技术更新速度日新月异。这种变革背后的核心动力在于硬件发展的瓶颈,促使行业转向追求软件的制作相册的源码规模化效益。现代后端软件工程师面临的挑战之一是如何对服务性能有全面的理解,而APM(Application Performance Monitoring)工具成为了解决这一问题的关键。
APM的基本构成包括指标性统计、分布式追踪和日志记录。指标性统计,如服务的吞吐量、成功率、流量等,是对单个指标或数据库的分析。分布式追踪则关注一次请求的全过程,从客户端发起到服务完成,甚至涉及业务流程,如商品订购流程,追踪请求的流转轨迹。日志记录则是程序运行过程中产生的信息收集,提供实时的事件记录。
随着技术的发展,性能监控工具的使用变得越来越普遍。早期,开发人员可能需要自己构建监控系统,但这既耗时又费力。SkyWalking等APM系统应运而生,旨在简化性能监控的实现,减少重复工作。
在SkyWalking中,dotnet探针的设计遵循核心规范。dotnet探针主要基于DiagnosticSource实现,这提供了一种消息的生产者消费者模型,使得事件可以在任意地方被接收。微软官方库中,如HttpContext、HttpClient、SqlClient等,都预留了性能打点,以捕获关键事件。第三方库如gRPC、CAP、SmartSql也提供了同样的功能。
开发人员可以通过适配SkyWalking,为自己的库添加性能打点,即向DiagnosticSource发送事件信息。在线查看源码工具这涉及到创建自定义采集器,监听特定事件,并将数据发送到数据中心。
探针的核心代码在于监听消息,其关键在于DiagnosticListener,它实现了消息的监听与数据的上报。监听的事件由特定的Processor负责处理,这些Processor实现了ITracingDiagnosticProcessor接口,具体负责数据的收集与转换。
两个有代表性的Processor示例展示了如何实现这一过程。一个针对AspNetCore请求管线,监听并收集请求相关的事件;另一个是针对System.Net下的通用core有哪些不错的开源项目?
以下为推荐的几个.NET Core开源项目: 1. Masuit.Tools这是一个包含了加密解密、反射操作、硬件信息、日期时间扩展等常用封装的开源项目。其开源协议规定,一旦因违反劳动法的公司使用该项目,项目作者有权追讨使用费或不允许使用包含该项目的源代码。项目特色功能包括Socket客户端操作类、模板引擎、任意进制转换、DateTime扩展及反射操作。
2. OrchardCore
OrchardCore 是使用 ASP.NET Core 构建的开源模块化、多租户应用程序框架,同时也是内容管理系统(CMS)的基础。它有两个项目,其中一个是 Fur,适用于.NET 5 平台的入门级、快速开发的 Web 应用框架。强调“六极”设计思想,易于入门、极速开发、极少依赖、极少配置、极其灵活、易于维护。此外,它结合了敏捷开发模式,用户能在冲一杯咖啡的时间内完成工作。Fur框架的特色功能包括支持.NET 5的新功能、六级架构设计和敏捷开发模式等。3. awesome-dotnet-core
这个集合包含了.NET Core开源项目的库、工具、框架、模板引擎、身份认证、数据库、ORM框架、处理、文本处理、机器学习、日志、代码分析、教程等资源。4. ZKEACMS
ZKEACMS 是一个基于ASP .Net Core开发的免费内容管理系统,提供了可视化编辑设计,支持直接在预览页面设计网页,以拼图方式构建网站。它采用跨平台设计,适用于Windows、MAC OS、Linux、Docker等环境。5. YiShaAdmin
YiShaAdmin 是一个基于.NET Core Web开发的快速开发平台,提供了代码生成器,能够减少%以上的编码工作量,提高开发效率,节省项目研发成本和开发周期。它使用了Bootstrap、ASP.NET Core、Entity Framework Core等技术。6. .NET Core源码
这是C#开源项目中的推荐,包含.NET Core源代码。7. Util应用框架
Util是一个.NET Core平台下的应用框架,旨在提升小型团队的开发输出能力。它由常用公共操作类、分层架构基类、UI组件、第三方组件封装、第三方业务接口封装、代码生成模板、权限等功能组成。8. OSharp
OSharp 是一个基于.NETStandard2.x的快速开发框架,使用了最新的.NETCore SDK,对 AspNetCore 进行了更高级的封装,并提供了一套规范的业务实现代码结构与操作流程,易于实际项目开发。9. XBlog
这是个人博客系统,提供了技术要点和功能。. FreeSql
FreeSql 是一个强大的对象关系映射技术(O/RM),支持.NETCore 2.1+或.NETFramework 4.0+或Xamarin等平台。. Autofac
经典的依赖注入(DI)框架,适用于Microsoft .NET,管理类之间的依赖关系,使应用程序在大小和复杂性增长时易于更改。. OpenAuth.Core
一个快速应用开发框架和权限管理工作流系统,基于经典领域驱动设计,提供组织机构、角色用户、权限授权、表单设计、工作流等功能。. Abp.VNext.Hello
这是ABP框架的示例项目,具备分层和模块化结构,包含授权、验证、异常处理、日志、数据库连接管理、设置管理、审计日志等特性。以上项目涵盖了从基础工具到高级框架的多个类别,适合不同开发者需求。
C# 有什么实用的第三方库吗?
推荐的.NET开源库:
1. Masuit.Tools
自家开源库,集成大量操作帮助函数,减少重复代码,支持数据库、日期时间、文件、硬件、HTML操作等,%项目实现通过扩展方法完成,star数已超。
2. Masuit.LunceneEFcore.SearchEngine
基于EntityFrameworkCore和Lucene.NET实现的全文检索引擎,支持带权重查询,毫秒级响应。
3. CacheManager
用于简化缓存管理,支持多种缓存提供程序,实现多层缓存,易于维护。
4. htmldiff.net-core
用于比较和突出显示HTML文件差异的库。
5. IP2Region
高性能本地IP地理信息查询库,提供多种查询算法和语言绑定。
6. MaxMind.GeoIp2
全球范围IP地理信息查询库,支持城市级别地理信息查询。
7. Karambolo.AspNetCore.Bundling.NUglify
实现.NET Core中静态资源自动打包和压缩的库,支持js、css等。
8. OpenXmlPowerTools
提供使用Open XML文档编程的接口,支持文档拆分、合并等功能。
9. svg
用于生成和操作SVG图形文件的库。
. TimeZoneConverter
快速转换Windows标准时区与IANA/Rails之间的库。
. RssSyndication
C#实现的RSS订阅接口库。
. Z.EntityFramework.Plus.EFCore
用于解决EF性能问题的三方库,提供过滤器、缓存等扩展功能。
. SharpCompress
文件压缩操作库,支持多种格式,提供只读和随机访问API。
. DnsClient
高性能DNS查询实现库。
. AngleSharp
解析HTML源码的DLL组件,支持DOM操作和JS语法。
. HtmlSanitizer
用于防止XSS攻击的HTML净化器。
. ObjectsComparer
对象比较器,自动逐个字段比较对象,生成差异结果。
. SearchExtensions
简单的本地全文检索中间件。
推荐结束,如有更多好用的开源组件,欢迎分享。
asp.net core入门之Startup
ASP.NET Core入门之Startup解析
Startup是ASP.NET Core应用程序的启动入口。在.NET 5及之前版本,通常通过startup.cs类进行程序初始化构造。而在.NET 5之后,操作简化,可以直接在Program类的主函数中构造配置Startup,或采用顶级语句方式直接编写。
在startup配置中,`var app = builder.Build();`之前的代码负责应用初始化,包括依赖注入和配置加载等操作,对应于startup.cs中的`ConfigureServices`方法。随后的配置步骤则是中间件设置,对应于`Configure`方法。新版中,`UseRouting`和`UseEndpoints`用于注册路由中间件的调用不再显式,因为最小托管模型下终结点路由中间件已包装整个中间件管道,故无需再调用。`app.MapRazorPages();`相当于调用了`app.UseRouting();`和`app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); });`。
了解扩展Startup的方法,`IStartupFilter`接口用于扩展Startup功能。它允许在不显式注册默认中间件的情况下添加默认值到管道的开头,实现配置请求管道。每个`IStartupFilter`可以在管道中添加一个或多个中间件。筛选器按照添加顺序调用,可在中间件之前或之后添加,从而附加到应用管道的开头或末尾。
通过实践,首先创建ASP.NET Core模板,包含Program文件。接下来添加`IStartupFilter`实现,用于控制台输出执行内容。在Program中注册`StartupFilterOne`,启动程序后可见中间件正常执行。多个`IStartupFilter`实现时,执行顺序与注入顺序相关。新增`StartupFilterTwo`并修改Program代码,发现是先执行`StartupFilterTwo`中的中间件,然后执行`StartupFilterOne`。
中间件注册在管道头部或尾部,调整`StartupFilterTwo`代码将`next(builder)`放在前面执行,可观察到效果变化。在管道尾部执行中间件时,若为终结点中间件,后序中间件可能不会执行。
讨论IStartupFilter的应用场景,适用于模块化开发方案、请求头部管道的校验或数据处理、请求管道尾部的特殊处理,如错误页面处理等。
注意事项强调IStartupFilter只能注册在管道头部或尾部,确保中间件使用顺序正确。若需要在管道中间插入中间件,请使用正常的`app.use`配置。
介绍IHostingStartup概念,可在启动时从外部程序集向应用添加增强功能,如实现代码0侵入的扩展服务。创建`StartupHostLib`类库,添加`Microsoft.AspNetCore.Hosting`包,新增实现`IHostingStartup`的类库。注意添加标记以识别`HostingStartup`,否则无法识别。在`LearnStartup`中引用项目,并在`launchSettings`环境变量中添加`ASPNETCORE_HOSTINGSTARTUPASSEMBLIES`配置。启动项目后发现`HostingStartup`执行顺序优先于应用,但会覆盖应用中间件管道,导致原有中间件消失。通过调整配置和依赖注入,可确保应用中间件正常工作。
总结IHostingStartup的应用场景,适用于代码0侵入场景,如AOP数据收集,无需中间件的场景或符合`IStartupFilter`中间件的场景。详细理解可自行查阅源码,本文仅作简要介绍。