日志系统
日志系统官方文档:https://learn.microsoft.com/zh-cn/dotnet/core/extensions/logging?tabs=command-line日志级别:Trace<Debug<Information<Warning<Error<Critical日志提供者(LoggingProvider):把日志输出到控制台、文件、数据库等。对于业务代码只要注入日志对象记录日志即可,具体哪些日志输出到哪里、什么样的格式、是否输出等都有配置或者初始化代码决定。
控制台日志安装:Microsoft.Extensions.Logging、Microsoft.Extensions.Logging.Console
1234567891011121314151617181920212223242526272829303132333435363738394041using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Logging;namespace Tes ...
Asp.NetCore_缓存
缓存缓存(Caching)是系统优化中简单又有效的工具,投入小收效大,数据库中的索引等简单有效的优化功能本质上都是缓存。缓存的概念:缓存命中,缓存命中率,缓存数据不一致,多级缓存。
客户端缓存RFC7324是HTTP协议中对缓存进行控制的规范,其中重要的是cache-control这个响应报文头。服务器如果返回cache-control:max-age=60,则表示服务器指示浏览器端“可以缓存这个相应内容60秒”。我们只要给需要进行缓存控制的控制器的操作方法添加ResponseCache特性,ASP.NET Core就会自动添加cache-control报文头。
123456789[Route("[controller]/[action]")] [ApiController] public class TimeController : ControllerBase { [HttpGet] [ResponseCache(Duration = 10)]//缓存这个内容10秒 public Date ...
Asp.NetCore_依赖注入
依赖注入普通写法在ASP.NET Core项目中一般不需要自己创建ServiceCollection、IServiceProvider。在Program.cs的builder.Build()之前向builder.Services中注入。
在Controller中可以通过构造方法注入服务。
1234567891011121314151617181920212223242526//控制器[Route("[controller]/[action]")] [ApiController] public class SumController : ControllerBase { private readonly Value value; public SumController(Value value) { this.value = value; } [HttpGet] public int GetValue() { ...
Asp.NetCore_基本使用
初识ASP.NET CORE Web Api12345678910111213141516171819202122using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;namespace AspTest.Controllers { [Route("api/[controller]")] [ApiController] public class TestController : ControllerBase { [HttpGet] public UserInfoRequest UserInfo() { var UserInfo = new UserInfoRequest(); UserInfo.Email = "abc@123.com"; UserInfo.Name = "Test"; User ...
配置系统
配置系统官方文档:https://learn.microsoft.com/zh-cn/dotnet/core/extensions/configuration.Net配置系统支持丰富的配置源包括文件、注册表、环境变量、命令行、Azure Key Vault等,还可以配置自定义配置源。可以跟踪配置的改变,可以按照优先级覆盖。还支持ini、xml等格式的配置源。还支持在运行时、调试时加载不同的json文件。还内置或第三方支持中心化配置服务器,比如使用Apollo、Nacos等开源服务器,或使用Azure、阿里云等的配置服务
JSON配置安装Microsoft.Extensions.Configuration(配置框架的包)和Microsoft.Extensions.Configuration.Json(读json的包)新建json文件,设置属性如果较新就赋值。config.json:
12345{ "name": "张三", "age": "18", "proxy": ...
单元检测
单元检测当我们要查看某个方法是否有错误,我们可以创建一个专门用来测试的类,用于不调用主程序的情况下,在测试类中检测方法是否符合所期待的那样。这样的行为称为单元检测或单元测试。
单元检测演示一台电脑如果想玩3A游戏的话当然需要一个好的显卡,能玩游戏的显卡就是好显卡,我们可以使用单元检测来判断。主程序:
123456789101112131415161718192021namespace Test { internal class Program { static void Main(string[] args) { IGraphicsCard card = new NVIDIA(); Console.WriteLine(card.Show()); } } public interface IGraphicsCard { string Show(); } public class NVIDIA:IGraph ...
依赖注入
依赖注入官方文档:https://learn.microsoft.com/zh-cn/dotnet/core/extensions/dependency-injection依赖注入的原理是——反射如果想用依赖注入框架需要:先用NuGet下载Microsoft.Extensions.DependencyInjection。使用名称空间using Microsoft.Extensions.DependencyInjection;
依赖注入框架的简单使用123456789101112131415161718internal class Program { static void Main(string[] args) { var sc = new ServiceCollection();//创建容器 sc.AddScoped(typeof(IStudent),typeof(Student));//接口描述,绑定该接口的类型的描述 var sp = sc.BuildServiceProvider ...
反射
对某些程序来说,它们操作的数据不是数字、文本或图形,而是关于程序和程序类型的信息。有关程序及其类型的数据称为元数据,被保存在程序的程序集中。程序在运行时,可以查看其他程序集或本身的元数据。这种行为叫做反射。使用反射要使用System.Reflection命名空间。
Type类blc声明了一个Type抽象类,用来包含类型的特征,使用这个类的对象能获取程序使用的类型信息。Type类成员
获取Type对象实例对象的GetType()方法和typeof()运算符
12345678910111213static void Main(string[] args) { Student std = new Student(); Type type1 = std.GetType(); Type type2 = typeof(Student); Type type3 = typeof(int); Console.WriteLine(type1.Name); Console.Wr ...
异步编程
关于线程默认情况下一个进程只包含一个线程。线程可以派生其他线程,因此在任意时刻,一个进程可能包含不同状态的多个线程,它们执行程序的不同部分。如果一个进程拥有多个线程,它们将共享进程的资源。系统为处理器执行所调度的单元是线程,不是进程。
异步编程演示异步获取百度的html然后异步写入test.txt文件中。
12345678910namespace Test { internal class Program { static async Task Main(string[] args) { HttpClient client = new HttpClient(); string str = await client.GetStringAsync(@"https:\\www.baidu.com"); string fileName = @"F:\test.txt"; await File.WriteAllTe ...
LINQ
Linq表示语言集成查询,它是.Net框架的扩展,允许我们以使用sql查询数据库的类似方法来查询集合。Linq的查询语法有方法语法和查询语法。方法语法是命令式的,查询语法是声明式的。位于System.Linq名称空间。Linq查询可以返回两种类型的结果——可以是一个枚举,它是满足查询参数的项列表;也可以是一个叫标量的单一值,它是满足查询条件的结果的某种摘要形式。
匿名类型学习Linq之前,让我们先来认识一下匿名类型。
12345var student = new { age = 18, name = "张三", major = "数字电路" };
匿名类型的成员类型由编译器推断,只需要在对象初始化语句中初始化即可。注意事项:匿名类型只能用于局部变量,不能用于类成员。必须使用var作为变量类型。编译器为匿名类型创建的属性是只读的。可以使用投影初始化语句来初始化匿名对象(与JS一样):
12345678static v ...














