.Net学习笔记
文章平均质量分 52
程序猿想成程序狮
学习中的一名程序猿,偶尔分享笔记,很懒。
展开
-
.net 6.0 webapi项目部署
1.服务器安装.net6.0 sdk参考:https://blog.csdn.net/m0_47659279/article/details/127472850?spm=1001.2014.3001.55012.配置Url:修改Program.cs文件添加如下代码:app.Urls.Add("http:3.发布原创 2022-10-23 18:13:35 · 2997 阅读 · 0 评论 -
linux 安装dotnet sdk
以dotnet6.0为例1.下载linux内核对应的dotnet6.0 sdk文件进入https://dotnet.microsoft.com/en-us/download/dotnet/6.0原创 2022-10-23 12:21:36 · 4840 阅读 · 0 评论 -
.net dapper简单使用
在appsettings.json中配置数据库连接"ConnectionStrings": { "MySQL": "server=localhost;user id=root;password=root;port=3306;database=test"}安装包Install-Package Pomelo.EntityFrameworkCore.MySqlInstall-Package Dapper注册IDbConnection服务services.AddScoped<IDbConn原创 2021-12-31 17:24:49 · 1033 阅读 · 0 评论 -
.net 只需三步让Swagger显示注释
.net 只需三步让Swagger显示注释先看效果第一步:导包(我使用的是.net5.0的框架,所以导入5.x的包,如果你使用.net6.0的框架,注意改版本号)Install-Package Swashbuckle.AspNetCore.Annotations -v 5.6.3第二步:配置Swagger服务,调用EnableAnnotations()方法以启用注释services.AddSwaggerGen(c =>{ c.EnableAnnotations();});第三步原创 2021-12-24 15:42:20 · 3217 阅读 · 7 评论 -
.net 连接MySql数据库 + 使用Microsoft.EntityFrameworkCore.Design自动生成实体类 + 使用EFCore操作数据库
文章目录准备MySql数据库使用Microsoft.EntityFrameworkCore.Design自动生成实体类.net 连接 MySql数据库使用EFCore操作数据库准备MySql数据库先准备好一个mysql数据库(我这里准备的是test数据库,里面又准备了两张表,其中book表中只有两个字段,Id(bigint类型)和 Name(varchar类型))使用Microsoft.EntityFrameworkCore.Design自动生成实体类使用VS新建一个asp.net core we原创 2021-12-24 11:02:29 · 2377 阅读 · 0 评论 -
.net 基于Cookie的身份认证
.net 基于Cookie的身份认证新建一个asp.net core web api项目注册基于Cookie的身份认证服务services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>{ //重写身份认证失败的逻辑,默认是跳转到/Account/Login,这里改为直接返回401 options.Events.OnRedirectToLogin = c原创 2021-12-22 10:56:32 · 730 阅读 · 0 评论 -
.net 配置网关(使用Ocelot)
本文演示一个最简单的demo,来模拟如何通过网关来访问服务,而不是直接访问服务创建三个asp.net core web api项目,一个作为网关,两个作为服务分别配置项目的访问路径网关的项目使用https://localhost:5001第一个服务的项目我这里使用https://localhost:6001第二个服务的项目我这里使用https://localhost:7001至此,服务端就已经完成了(没错,只要改个路径就好了,其他的代码全靠自动生成,因为懒得改)OK,现在来配置网关,网关原创 2021-12-21 14:39:54 · 3414 阅读 · 0 评论 -
.net grpc简单使用
本文提供一个最简单的grpc demo,来模拟一个本地应用使用grpc的方式去调用一个远程的服务文章目录首先创建一个grpc项目来模拟远程服务再创建一个项目来调用服务首先创建一个grpc项目来模拟远程服务先打开vs,新建一个ASP.NET Core gRPC项目(直接搜索grpc就好了)项目创建好后重点关注Protos文件夹和Services文件夹Protos文件夹用于存放.proto文件。(.proto文件我理解为是对远程服务的一种描述,例如服务所在的命名空间是什么,服务提供了哪些方法,服原创 2021-12-20 18:38:01 · 2078 阅读 · 0 评论 -
.net 获取HttpContext
文章目录在Controller中获取HttpContext在自定义的服务中获取HttpContext在Controller中获取HttpContext可以直接使用HttpContext来获取当前的HttpContext,例如:[HttpGet]public void Test(){ Console.WriteLine(HttpContext.GetHashCode());}在自定义的服务中获取HttpContext在自定义的服务中获取HttpContext可以借助IHttpCont原创 2021-12-16 10:27:00 · 1537 阅读 · 0 评论 -
.net 异常处理
文章目录使用开发者异常页面中间件使用错误处理中间件使用ExceptionFilterAttribute使用开发者异常页面中间件新建一个ASP.NET Core Web API项目在Controller随便写一个Action来抛一个异常[HttpGet]public void ThrowError(){ throw new Exception("Error occurred");}运行项目,访问该Action即可看到如下页面之所以能看到该页面,是因为新建的ASP.NET Core原创 2021-12-14 14:05:38 · 1201 阅读 · 0 评论 -
.net 批量注册服务
假设我们需要注册xxxQuery服务,例如下图中的BarQuery和FooQuery传统的做法是services.TryAddScoped<IBarQuery, BarQuery>();services.TryAddScoped<IFooQuery, FooQuery>();这显然没什么问题但是,如果这是一个很大的项目,那么随着业务的发展,相似的xxxQuery很可能会越来越多。此时,如果仍然使用上述的方式来一个个地注册xxxQuery服务,那么有关注册xxxQuery原创 2021-12-13 14:58:00 · 731 阅读 · 0 评论 -
.Net 依赖注入之服务注册的多种方式
忽略服务生命周期的差异,只考虑服务生命周期为Scoped的情况,其它类型类似services.AddScoped<IOrder, Order>();最普通的注入方式services.AddScoped<IOrder, Order>();这种方式注册服务就是简单的将服务添加到容器中,即使容器中原本就有IOrder服务,也会再添加一个IOrder服务进去,这样一来容器中就会存在多个IOrder服务在需要获取服务的地方注入IOrder服务时,默认会得到最后一个注册的IOrde原创 2021-12-09 14:27:55 · 1702 阅读 · 0 评论 -
C#访问Elasticsearch(ES)
文章目录.net访问Elasticsearch先讲一下ElasticLowLevelClient的基本使用创建ES客户端,与ES服务器建立连接添加查询再说ElasticClient创建ES客户端,与ES服务器建立连接添加查询退化.net访问Elasticsearch.net访问Elasticsearch常借助nuget包Elasticsearch.Net或NestElasticsearch.Net提供了ElasticLowLevelClient来作为访问ES的客户端而Nest提供ElasticCli原创 2021-12-01 15:53:46 · 3564 阅读 · 0 评论 -
.net ResponseCache简单使用
.net ResponseCache简单使用注册服务services.AddResponseCaching();启用中间件在需要使用缓存的地方使用ResponseCache特性,Duration表示缓存的绝对过期时间[HttpGet][ResponseCache(Duration = 5)]public object CacheTest(){ Console.WriteLine("访问了Action"); return DateTime.Now;}多次访问Cache原创 2021-11-25 16:55:28 · 437 阅读 · 0 评论 -
.net 使用Polly进行失败重试
.net 使用Polly进行失败重试安装nuget包:PollyPolly.Extensions.HttpMicrosoft.Extensions.Http.Polly在使用添加HttpClient服务时,使用AddTransientHttpErrorPolicy配置瞬时Http错误策略使用policy.RetryAsync()方法进行失败重试services.AddHttpClient<MyHttpClient>(client =>{ client.BaseAdd原创 2021-11-25 09:35:14 · 808 阅读 · 0 评论 -
.net HttpClient简单使用
.net HttpClient简单使用创建一个名为HttpClientTest的Web API项目新建Clients文件夹,用于存放自定义的HttpClient在Clients下新建一个MyHttpClient类代码为:namespace HttpClientTest.Clients{ public class MyHttpClient { private readonly HttpClient _client; public MyHttp原创 2021-11-24 10:44:54 · 1188 阅读 · 0 评论 -
.net 整合Exceptionless开源日志框架(基础)
.net 整合Exceptionless开源日志框架Exceptionless是一个开源的日志框架,它将产生的日志信息进行分类统计,并以可视化的方式进行展现,让我们可以更方便地查看日志、管理日志要在.net 项目中使用Exceptionless,需要先去Exceptionless官网注册一个账号,并新建一个项目新建好项目后会有一个API 密钥OK,回到我们的.net 项目代码需要注册Exceptionless服务,并使用中间件注册服务services.AddExceptionless(Co原创 2021-11-12 15:15:16 · 1326 阅读 · 0 评论 -
.net 输出日志时带上作用域信息
.net 输出日志时带上作用域信息有时候我们希望输出日志时带上作用域信息,这样就能对不同作用域下的日志作一个区分可以在日志配置中使用"IncludeScopes": true例如如果想让Console输出的日志带上作用域信息,可以这样配置"Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information"原创 2021-11-12 11:12:24 · 237 阅读 · 0 评论 -
.net 日志输出提供程序
.net 日志输出提供程序日志输出提供程序是用与指定日志输出位置的一个东西当你使用.net webapi 默认的日志框架Logger打印日志时,日志除了会在终端中输出,还会在Debug窗口中输出例如以下代码_logger.LogInformation("------------------------Info---------------------");_logger.LogError("------------------------Error---------------------");原创 2021-11-12 10:25:04 · 779 阅读 · 0 评论 -
Drapper 查询具有一对多关系的实体
假设有一个Student表和一个Book表他们构成一个一对多关系,一个Student对应多个Book相关类的代码为public class Student{ public int Id { get; set; } public string Name { get; set; } = string.Empty; public List<Book> Books { get; set; } = new List<Book>();}public clas原创 2021-11-09 17:39:06 · 619 阅读 · 0 评论 -
EF Core 模糊查询
EF Core 模糊查询使用EF.Functions.Like方法_context.OnlineTrainings.Where(e => EF.Functions.Like(e.Name, "%测试%"))原创 2021-10-21 14:06:47 · 979 阅读 · 0 评论 -
Castle动态代理的使用
Castle动态代理的使用using System;using Castle.DynamicProxy;namespace CSharpTest2{ public class Person { public virtual void Eat() { Console.WriteLine("吃饭"); } } public class PersonInterceptor : IInterceptor原创 2021-10-13 15:49:42 · 191 阅读 · 0 评论 -
AutoMapper基本使用
导包AutoMapperAutoMapper.Extensions.Microsoft.DependencyInjection假如需要将Student映射为StudentCopynamespace WebApplication14{ public class Student { public string Name { get; set; } public int Age { get; set; } public string Sex原创 2021-09-28 10:44:50 · 342 阅读 · 0 评论 -
.net 使用jwt进行身份认证
什么是身份认证和鉴权举个例子假设有这么一个小区,小区只允许持有通行证的人进入,陌生人如果想直接进入小区会被保安拦住,他必须先办理通行证才会被允许进入类比身份认证和鉴权体系一个人要访问我的一个机密的接口,我首先需要知道你是谁,搞清楚你是谁的过程就是身份认证,如果我搞不清楚你是谁,那你就是陌生人,身份认证失败。身份认证通过,并不一定就允许访问我的机密的接口,因为身份认证只是让我知道了你是谁,但是我还不知道你有没有访问我接口的权限,因此还需要进行鉴权。鉴权就是在身份认证的基础上来查阅你是否有访问某接口原创 2021-09-10 22:15:36 · 4812 阅读 · 0 评论 -
SingalR实现简单的聊天室
SingalR实现简单的聊天室SignalR服务端新建一个ASP.NET Core Web API项目给项目命名为TestSignalRServer将https取消勾选之后点击创建项目创建完成后,新建一个ChatHub类,这个类需要继承Hub,这样就可以调用客户端方法了using Microsoft.AspNetCore.SignalR;using System;using System.Collections.Generic;using System.Linq;using S原创 2021-09-06 15:16:23 · 390 阅读 · 0 评论 -
.net RabbitMQ的几种工作模式
文章目录.net RabbitMQ的几种工作模式"Hello World"demo"Work queues"demo"Publish/Subscribe"demo"Routing"demo"Topics"demo.net RabbitMQ的几种工作模式查看官网https://www.rabbitmq.com/getstarted.html可以看到RabbitMQ的几种工作模式“Hello World”一个生产者一个队列一个消费者,生产者生产消息放入队列,消费者从队列中接收消息消费最基本的模式原创 2021-09-01 16:03:25 · 414 阅读 · 0 评论 -
.net 读配置信息并将配置信息绑定到一个对象上
.net 读配置信息并将配置信息绑定到一个对象上假设我们的appsettings.json配置文件是这样的{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "Test": { "Key原创 2021-08-31 11:09:43 · 475 阅读 · 0 评论 -
.net 日志ILogger基本使用
.Net5 WebApi使用日志Logger在Controller中using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Logging;namespace TestDI.Controllers{ [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { // 引入logge原创 2021-08-21 22:24:42 · 5350 阅读 · 0 评论 -
.net5 WebApi中使用Session
.net5 WebApi中使用Session在Startup.cs中配置Session然后就可以在Controller中使用Session了,例如using Microsoft.AspNetCore.Mvc;using System.Text;namespace TestDI.Controllers{ [ApiController] [Route("[controller]")] public class WeatherForecastController : Controlle原创 2021-08-21 21:27:13 · 1032 阅读 · 0 评论 -
EF Core事务
EF Core 事务EF Core提供了SaveChange方法,可以把数据操作好之后再统一调用SaveChange方法,这样就实现了简单的事务功能如果需要多个SaveChange形成一个事务,就是说多个SaveChange要么全部成功,要么全部不执行,则需要使用DbContext.Database.BeginTransaction()来开启一个事务出现错误时调用IDbContextTransaction.Rollback()方法实现回滚例如using (IDbContextTransaction原创 2021-08-26 13:49:31 · 2794 阅读 · 0 评论 -
EF Core 输出sql语句
EF Core 输出sql语句在你的DbContext的OnConfiguring方法中增加一行代码即可optionsBuilder.LogTo(Console.WriteLine, Microsoft.Extensions.Logging.LogLevel.Information);原创 2021-08-25 18:44:52 · 2019 阅读 · 0 评论 -
EF Core MySql 自动生成实体类
EF Core / MySql 自动生成实体类在项目中打开终端(也就是appsettings.json同级目录)安装工具dotnet tool install --global dotnet-ef在项目上安装包 Microsoft.EntityFrameworkCore.Designdotnet add package Microsoft.EntityFrameworkCore.Design运行以下命令以验证是否正确安装了 EF Core CLI 工具dotnet ef至此EF Core原创 2021-08-23 15:15:13 · 518 阅读 · 0 评论 -
.net 自定义中间件
.net 自定义中间件新建一个类,对app的方法进行扩展public static class MyMiddleware{ public static void UseMyMiddleware(this IApplicationBuilder app) { app.Use(async (context, next) => { Console.WriteLine("1"); await next.Invoke(); Console.Wri原创 2021-08-24 22:09:34 · 247 阅读 · 0 评论 -
.net 中间件的使用 Use,Run,Map,MapWhen,UseWhen
.net 中间件的使用 Use,Run,Map,MapWhen,UseWhen.net 提供了几种添加自定义中间件的方法Use,Run,Map,MapWhen,UseWhenUseapp.Use(async (context, next) =>{ Console.WriteLine("use1"); await next.Invoke(); Console.WriteLine("use2");});Use方法最明显的特征是传入的委托中含有一个委托参数,我们一般用next来接原创 2021-08-25 12:54:35 · 2783 阅读 · 0 评论 -
Newtonsoft.Json基本使用
Newtonsoft.Json使用string jsonString = "{\"name\":\"zhangsan\",\"age\":\"17\", \"son\":{\"age\":\"1\"}}";// jsonString转jObjectJObject jObject = (JObject)JsonConvert.DeserializeObject(jsonString);// 获取jObject中的属性值string name = (string)jObject["name"];原创 2021-08-23 15:15:55 · 2084 阅读 · 0 评论