![](https://img-blog.csdnimg.cn/c41e0e8c89ae4e46a8eab7cc30a0acd3.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
.NET
asp.net core 以及 .Net 技术
持久的胜利
这个作者很懒,什么都没留下…
展开
-
.Net6 之 asp.net core webapi Swagger 版本控制及接口注释说明
ApiExplorerSettings(GroupName =nameof(ApiVersionInfo.接口版本V1))][ApiExplorerSettings(GroupName =nameof(ApiVersionInfo.接口版本V2))]上图 是 v1版本下的接口,如果需要 v2中有 接口数据 ,需要返回 第二步 在其他控制器上 定义。第一步 首先 在 控制器上 和 每个接口方法 上 添加 注释 如图。第二步:规定 控制属于 哪个 版本。第二步 :打开项目的.csproj文件加上 添加。原创 2022-11-11 17:00:47 · 3206 阅读 · 2 评论 -
asp.net core MVC 异常捕获 并自定义 异常页面
() 用于 程序内部异常 可以捕获 异常页面中的 路径 错误消息 堆栈消息 等。>() 用于404异常 可以捕获 异常页面中的 路径 和 URL参数。一般 可以同时开启两个。同时 捕获404异常和 程序内部的异常。原创 2022-10-22 23:19:38 · 404 阅读 · 0 评论 -
asp.net core MVC 上传单文件与多文件
4.构造函数 注入 IWebHostEnvironment 用于获取 asp.net core MVC WebRootPath(网站根目录) 本机的wwwroot路径。2.修改 第3步 前端视图 增加。最后 需要在 form表单添加。3.前端视图 添加前端代码,属性,支持多文件上传。原创 2022-10-22 16:33:53 · 1193 阅读 · 1 评论 -
asp.net core EF Core 添加种子数据
使用方法 需要 在 MYdbcontext 中的 重载 OnModelCreating 方法中。另一种 添加种子数据 方法: 可以考虑使用 扩展方法,为了 解耦,方便管理。1.建立 ExtensionModelBuilder.cs文件,内容 如下。EF Core 种子数据 就是 为 数据库添加 初始数据。原创 2022-10-21 22:51:22 · 1047 阅读 · 0 评论 -
asp.net core EF Core 注册MYdbcontext遇到问题
需要在 MYdbcontext中 添加 构造函数,并且以 DbContextOptions 作为参数 并继承 base。如果需要 在Program.cs 配置中 配置 依赖注入 MYdbcontext 服务。整个项目中 其他 地方 都可以通过 构造函数 依赖注入 从而调用。推荐使用 AddDbContextPool 提高性能。原创 2022-10-21 22:15:51 · 469 阅读 · 0 评论 -
asp.net core MVC 模型验证
等,会直接把 模型类 的 英文名称 展示在 前端页面中,那么就需要 在 每个模型实体的 属性上 加上。使用方法,需要在 控制器方法中 使用 ModelState.IsValid。如果验证通过 返回true。这里 只是做一个对asp.net core MVC模型验证的额外补充。MVC模型验证 基本的使用方法和 笔者的以前的文章 使用方法 相同。在MVC视图页面中 如果 在前端中直接 使用。模型验证使用,参考笔者 写过的文章。并且支持 Enum等。原创 2022-10-21 16:59:34 · 377 阅读 · 0 评论 -
asp.net core MVC TagHelpers
如果改成这个 路由 普通前端 代码会报错,而使用TagHelpers 就不要 修改 任何 代码,并且直接匹配路由。源代码 是 普通 前端写法,场景:更改路由,那么普通 前端的写法 就会导致 找不到页面,并且报错,如果使用 TagHelpers的写法 就不必修改 前端页面 直接 匹配路由。} 普通前端 代码 只能匹配 这个条路由,如果路由改变,那么成千上万前端代码都需要 更改。2.简单场景 使用 拿a标签做演示。原创 2022-10-21 14:42:28 · 302 阅读 · 0 评论 -
asp.net core MVC 属性路由
上面 定义 域名:端口/Test 也可以直接访问 到 Home控制器下的 Index。属性路由 提供 很大的灵活性,并且不根据 Controller控制器 而直接访问。缺点:需要手动设置,推荐使用 MVC默认路由。原创 2022-10-20 21:58:14 · 133 阅读 · 0 评论 -
asp.net core MVC 如何在 单视图页面 引用指定 CSS或JS
单个页面中 需要 引用 特定 css或js时,如下使用,@section Scrip 这个 Script是在布局页 中 自定义的 名称。解决办法 就是 在 布局页 上方 添加 @RenderSection("Script",required:false)网页 一般 都会 采用 布局页 但是 如果 在 布局页 的 上方 添加 脚本,就会带来 问题:就是 只要 引用这个 布局页 就会 全部添加 相同的 css或js,原创 2022-10-20 20:26:13 · 1940 阅读 · 0 评论 -
asp.net core MVC 中视图 如何 使用 多种 布局页
如果需要 在 指定 控制器下的所有视图 引用 布局页 如:/Home/Index 如果需要 在Home下的所有 视图 统一 使用 某一个 布局页,需要 在 Home文件夹下 添加 _ViewStart.cshtml。所有页面 默认都会 采用 默认的 _Layout.cshtml 布局页,如果需要部分或特定 视图采用 不同的 布局页 ,代码如下,在视图页面 手动添加 自定义布局页。新建一个 区分 默认 _Layout.cshtml 布局页 如:_LayoutMy.cshtml。原创 2022-10-20 19:34:58 · 483 阅读 · 0 评论 -
asp.net core MVC ViewModel模型视图
ViewModel 就是服务 于 视图的,当Model模型 不够使用,或者不能满足 视图展示数据,就需要考虑。场景:比如有一个学生信息Model ,但是 视图 需要 学生信息Model 和 一个视图需要的标题。如果把Title定义 在 学生信息Model中 就不符合 规范,所以要 建立 ViewModel文件,把学生Model和Title 定义在 一起,实现 这种需求。起名规则:需要 指定视图+ViewModel后缀 如 Home/Index,应该起名 HomeIndexViewModel.cs。原创 2022-10-20 17:55:09 · 254 阅读 · 0 评论 -
asp.net core MVC 中的 视图文件间 的跳转
上面 代码 index方法 视图 在 Views/Home/Index下,它需要访问 Views/MyTest/Test 就需要先用 ../到Views目录下,然后 跟着 /MyTest/Test 这就可以访问到了,注意 Test没有后缀 cshtml。~/代表 根目录,绝对访问 需要带上 .cshtml 文件后缀,否则出错。视图绝对路径 需要加上 文件后缀 如.cshtml 并且 以 ~/ 开头,~/代表 整个项目的根目录开始。视图相对路径 不需要加上 文件 后缀,如 .cshtml。原创 2022-10-20 16:34:40 · 974 阅读 · 0 评论 -
asp.net core 内置 web服务器
asp.net core 内置 web服务器 Kestrel 是一个跨平台 Web 服务器,属于 进程外托管模型,可以独立处理 http请求,效率更高。但是为了 运维操作,一般使用 反向代理 IIS、Nginx 或 Apache 结合使用。用于获得 Nginx 高性能的 Unix 套接字。用于启用 WebSocket 的不透明升级。HTTP/2(在 macOS+ 上除外)原创 2022-10-19 17:26:59 · 861 阅读 · 0 评论 -
EF Core 实现 DDD 中的 值对象
值对象 就是 实体类中 还有 其他 实体没有标识的 对象 如下。3.配置 shopconfig。1. 实体对象Shop.cs。原创 2022-10-16 15:39:18 · 283 阅读 · 0 评论 -
架构之微服务概念
将单一应用程序划分成一组小的服务或功能,服务或功能之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中或服务器中,服务与服务间采用轻量级的通信机制互相沟通。(通常基于asp.net core web api)缺点:运行效率低,复杂。原创 2022-10-14 21:33:53 · 54 阅读 · 0 评论 -
asp.net core Signalr 分布式部署
因为 跳过协商 客户端与服务端 连接固定,但是每个 服务器 并没有 相互关联,所以要使用Redis 做中心,集群所有服务端。前提条件 必须 跳过协商 强制使用 websocket。在Program.cs文件中配置。下面 讲述 使用 过程。引用的 nuget包为。原创 2022-10-13 16:49:45 · 434 阅读 · 0 评论 -
asp.net core Signalr 的基本使用
最重要的是,这意味着你可以对应用进行编码,以利用 WebSocket,而无需担心为旧客户端创建单独的代码路径。SignalR 还阻止你担心 WebSocket 的更新,因为 SignalR 已更新以支持基础传输中的更改,从而为应用程序提供跨 WebSocket 版本的一致接口。实时 Web 功能是指这样一种功能:当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请求新的数据。淘汰长轮询(长轮询是与服务器保持持久连接的最简单的方式,最大问题 是占用 服务器的有限连接)原创 2022-10-12 23:33:26 · 238 阅读 · 0 评论 -
asp.net core FluentValidation的数据效验 的基本使用
2.建立 ModifyUserIntendedEffect.cs文件 用于 效验。这个自定义的类 必须继承 AbstractValidator 并在 在 构造函数中 设置效验方法。FluentValidation 可以 提供 数据效验的 解耦性,通俗讲 就是 一个类 可以 有多种效验方法,相互都是独立文件,传输和效验 完全分开。并且 自定义 效验 比较 容易。1. 首先 建立 ModifyUser2.cs文件 用于模型类。原创 2022-10-12 20:23:56 · 704 阅读 · 0 评论 -
asp.net core 内置数据校验
1.耦合在一起,不能单独使用,比如 同一个类 在不同 地方需要 效验 不同,这里的 内置数据校验 就无法满足。内置数据 校验 使用起来 比较 方便,微软提供 非常常用的 内置数据校验。1. 创建 ModifyUser.cs 文件。返回的错误信息 如下。2. 自定义内置数据校验 比较麻烦。解决办法 请看 笔者写的。下面 介绍 基本 使用。原创 2022-10-12 14:41:36 · 399 阅读 · 0 评论 -
asp.net core 后台托管服务
注意事项:.net6中 如果在 后台托管服务中 有任何 异常,则整个 服务将 自动 停止运行,在 .net5 和 asp.net core 3.1 中不会,但是.net6中的行为 是比较好的,因为 既然做后台 托管服务,代码肯定比较重要,推荐 要提前 预先 做好 try{}catch(){} 避免 整个服务停止。托管服务 是以 单例声明周期 注入到容器中,所以不能在 注入瞬时和范围模式 解决办法如下。3. 在 托管服务 代码中 创建 范围服务 并调用。2.在Program.cs 中添加 配置。原创 2022-10-11 23:27:47 · 1457 阅读 · 0 评论 -
浅谈 asp.net core JWT 无法撤回的难题
假如 在 客户端1进行 登录 2次,数据库中的version 就变为 2。如果在 客户端2中在进行 登录一次,然后 version记录会 变为 3次,重点来了,笔者 通过 当前的客户端 用户 的 version 与 数据库中的 version 记录做 比较,如果 当前客户端用户的 version < 数据库中的version记录,那么 就可以认为 这条 JWT失效,如果注销用户,也自动再加1次,这个正好 可以 解决上面 提到的问题。然后在使用 ActionFilter 进行 过滤。我们来合理的 分析下。原创 2022-10-11 22:28:40 · 382 阅读 · 0 评论 -
asp.net core 让Swagger中能带 JWT 报文头
在 Program.cs 中添加 如下 配置 可以让Swagger 支持 添加 全局 报文头 也可以添加自定义 报文头。原创 2022-10-11 20:53:15 · 170 阅读 · 0 评论 -
asp.net core 中的Jwt(Json Web Token)的使用
第一部分我们称它为头部(header 明文 的加密算法类型),第二部分我们称其为载荷(payload, 明文的各种 自定义 信息),第三部分是签证(signature只有服务器端才知道的密钥).简单描述: session不支持 分布式 并且在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用。如果 退出 JWT 一般把 JWT删除 就好。流程:服务器 生成 Jwt 颁发给 客户端 ,每次客户端 请求 带上 Jwt,服务器端在做效验。原创 2022-10-11 18:46:10 · 1036 阅读 · 0 评论 -
asp.net core Identity框架 密码重置(验证码或链接)
这里 的 token 验证码 有 两种 一种像是 短信验证码 比如 954153 这种 需要用户 填写的。Identity框架提供了 验证码或链接的形式 进行 密码的 重置,下面以 例程 说明核心内容。在 Program.cs文件 设置中 进行 设置。下面 例程 进行 新密码 修改。原创 2022-10-11 14:44:09 · 797 阅读 · 0 评论 -
asp.net core Identity 框架的 基本使用
这里 介绍 identity 的 使用 例子 如果 需要 了解 identity的配置 请参阅 笔者的上一篇文章。第二个例子 以用户登录的 小例子 讲解 identity 的 基本 使用。第一个例子 讲述 Identity 的 角色和 用户 成员的 创建。下面的 例子 笔者 已经 提前写好 所有 注释 ,请看 例程。原创 2022-10-11 13:44:04 · 392 阅读 · 0 评论 -
asp.net core Identity 用户管理 框架的配置
ASP.NET Core Identity是一个会员身份系统,早期它的名字是Membership,当然那是一段“古老”的历史,现在我们来了解全新的Identity。它允许我们创建、读取、更新和删除账户。支持账号验证、身份验证、授权、恢复密码和SMS双因子身份验证。它还支持微软、Facebook和Google等第三方登录提供商。它提供了一个丰富的API,并且这些API还可以进行大量的扩展。3. 创建 MyDBcontext.cs 文件 这里要注意。1.首先 创建 MyUser.cs 文件。原创 2022-10-10 19:00:41 · 820 阅读 · 0 评论 -
asp.net core 自定义中间件 的基本使用
asp.net core 中间件 :基本 理解 和 Filter类似。区别: filter是mvc中包含的功能,针对 action方法。必须有 async Task InvokeAsync方法 参数为 HttpContext 并且 方法名不能写错。下面 自定义中间件 的基本使用,一般中间件 都在 Program.cs中。推荐使用下面的 中间件类。可以在管道中的下一个中间件前后执行一些工作。选择是否将请求传递给管道中的下一个中间件。中间件类 不要 继承 和实现接口 但是必须规范。最后结果 执行 顺序为。原创 2022-10-07 22:25:31 · 475 阅读 · 0 评论 -
asp.net core ActionFilter 进行 所有接口 访问限速
访问限速 场景: 恶意程序 频繁访问 造成服务器压力,有可能压垮 服务器,所以在同一个ip要进行限速,下面主要是 通过 内存缓存 进行 限速,时间为1秒,下面只是举例,还需要根据各位的公司业务等场景 自作修改,这里只 给出 原理。2.建立 RateLimitingActionFilter.cs文件 在此文件中 进行以下 配置。通过 2 进行 配置 ,所有控制器 方法 同一个ip进行了1000毫秒 访问的限制。1.先 在 Program.cs文件 添加如下 配置。原创 2022-10-07 21:22:01 · 289 阅读 · 0 评论 -
asp.net core 利用ActionFilter提交或回滚 自定义控制器方法的事务
下面代码 标注详细 ,利用ActionFilter提交或回滚 自定义方法的事务,是 TransactionScope实现的 如果有疑问 请看上一篇文章 讲述了 TransactionScope 的使用。这个是不需要 ActionFilter 事务的 主要加上 自定义的 [NOTransactionScope]下面是 NOTransactionScope 特性 文件名NOTransactionScope.cs。原创 2022-10-07 17:49:35 · 263 阅读 · 0 评论 -
asp.net core TransactionScope 提交或回滚事务
在 efcore 中如果 有多次 保存,如果 没有 TransactionScope。成功的保存 就会真正的保存在数据库中,业务 可能是 如果 在代码段中 仅有一次 错误,则全部 回滚。使用的方法 就是 需要 using(TransactionScope) {} 这 using的代码块中 如果 有任何 错误,全部就会回滚 如果没有任何 错误 ts.Complete();但 TransactionScope 不局限在 efcore中 如 文件读写 等操作。原创 2022-10-07 17:19:20 · 975 阅读 · 0 评论 -
asp.net core AOP 面向切面编程 AcitonFilter
ActionFilter 执行流程:ActionFilter 的 OnActionExecuting 方法是在 执行 controller方法之前 执行,然后 执行 controller方法。多个 ActionFilter 方法 执行 ActionFilter方法1前方法 ActionFilter方法2前方方法 controller 方法 ActionFilter方法2后方法 ActionFilter方法1后方法。配置:需要在 Program.cs 文件 注入。原创 2022-10-07 15:10:40 · 221 阅读 · 0 评论 -
asp.net core AOP 面向切面编程 ExceptionFilter
使用方法 1. 创建 MyException.cs 继承 IAsyncExceptionFilter 实现 OnExceptionAsync 方法。ExceptionFilter 是 在不修改源代码 的情况 下 给 asp.net core 程序 添加 异常捕获 并自定义处理异常。面向切面编程,也叫做面向方法编程,是通过预编译方式和运行期动态代理的方式实现不修改源代码的情况下给程序动态统一添加功能的技术。然后在 Program.cs 文件中 添加注册。下面为 MyException.cs 示例。原创 2022-10-04 23:38:39 · 290 阅读 · 0 评论 -
asp.net core 防止机密信息外泄GitHub
需要注意:secrets.json appsettings.json 都是 asp.net core 自动加载的 无需手动加载 ,即可直接使用。顺序 为 1.secrets.json 2.appsettings.json 如果这两个 json节点重名 appsettings.json会覆盖 secrets.json配置 而appsettings.Development.json会覆盖 appsettings.json。appsettings.Development.json为多环境变量配置。原创 2022-10-04 19:21:48 · 294 阅读 · 0 评论 -
asp.net core 服务器端 分布式缓存 的使用
如果想设置缓存过期时间则通过DistributedCacheEntryOptions,它可以设置滑动过期时间(SlidingExpiration)、绝对过期时间(AbsoluteExpiration)和相对于现在的绝对过期时间(AbsoluteExpirationRelativeToNow)。.net6中推荐使用 Redis 分布式缓存,它是 以 键值对 存储 如果没有必要 推荐使用 内存缓存 这个分布式 缓存 适用于 特大项目 下面介绍下 .Net6 中如何使用。推荐 转载文章 下载与安装。原创 2022-10-04 12:11:21 · 513 阅读 · 0 评论 -
asp.net core 服务器端 内存缓存 的使用
2.通过 SlidingExpiration 属性 设置 滑动过期时间 -- 值的是 设定了时间,如果在设定的时间段没有一次访问,这个时间到期 就会清除 缓存,如果在 这个时间没有 到期 时 一直访问 就会 一直自动续时。当某一个时刻出现大规模的缓存失效的情况,那么就会导致大量的请求直接打在数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库崩溃。缓存穿透最直白的意思就是,我们的业务系统在接收到请求时在缓存中并没有查到数据,从而穿透到了后端数据库里面查数据的过程。原创 2022-10-03 21:14:48 · 392 阅读 · 0 评论 -
asp.net core 服务器端响应缓存(是否形同虚设?)
缺点:如果浏览器设置 禁用缓存 和 请求时带上cahe-control:no-cache 都会让服务端响应缓存 失效,并且 只有 在 get 和 head 响应才会被 缓存 请求不能包含有 Authorization Set-Cookie等。场景:对于高并发或大量访问 可以 有效的时间段缓存,比如 一万次请求某一个地址,最早的第一次请求后,服务器端 就会 做 缓存 处理,相当于 剩下的 九千九百九十九 读到的都是 缓存数据,从而达到 提高 asp.net core 程序稳定性。原创 2022-10-01 18:51:02 · 112 阅读 · 0 评论 -
asp.net core 客户端响应缓存
Duration 是以秒为单位 告诉浏览器 或 多端 在多少秒内 直接使用 本地缓存。可以 通过在 webapi 的接口方法中 上加入 特性。原创 2022-10-01 17:25:50 · 80 阅读 · 0 评论 -
asp.net core 多级缓存 概念
多级缓存 一般指的是 一端 到 终端 会有多级,并且每级 都可以能 有自己的缓存。比如 浏览器➡网关服务器➡web服务器➡数据库服务器。每层 都可以有 缓存,所以叫 多级缓存。原创 2022-10-01 17:10:25 · 197 阅读 · 0 评论 -
asp.net core 调用 自建类库自实现依赖注入
最大的特点 是 asp.net core webapi 项目 不用改动 在本 解决方案中 在 添加 一个或多个 自建类库。在 asp.net core webapi 项目 Program.cs 文件中 添加 以下代码。在 asp.net core webapi 项目 中就可以用 构造函数 依赖注入 进行 使用。首先 asp.net core webapi 项目和 所有的自建类库 需要 安装 以下类库。在 所有的 自建类库 中创建一个类 并且实现 IModuleInitializer接口。原创 2022-10-01 16:52:14 · 771 阅读 · 0 评论 -
asp.net core 依赖注入,同时也支持MVC
1. 在.net6 中的 Program.cs 添加 依赖注入,asp.net core 中不需要引用依赖注入包,也不需要 创建 依赖注入,asp.net core 默认创建好了。asp.net core 还有一种 依赖注入方式 这种方式 是 操作 比较耗时的场景 如果还是选择 构造函数 注入,那么 本来 不耗时的接口 运行 就会 非常的 慢,所以采用 谁调费时操作,谁自己注入。下面是 调用 依赖注入 在此 说明下, .net6的依赖注入是 以 构造函数方式 注入的。最后 推荐 转载参考文章。原创 2022-10-01 16:09:22 · 326 阅读 · 0 评论