升级到 .net 8 后使用 ef core 查询遇到错误:microsoft.data.sqlclient.sqlexception (0x80131904): incorrect syntax near '$'. 附近的语法不正确-编程思维

是因为 .net 8 优化了 Contains 子句的 SQL 翻译,之前的 IN 查询有性能问题 但这个优化只有 SQL Server 2016 及以上版本的数据库支持,否则就会报这个错 而且即便数据库引擎版本达到,数据库本身的兼容性设置如果低于 SQL Server 2016 的话,也会报错 解决方案1: 安装 SQL Server 2016 或更高版本的数据库,或者修改数据库本身的兼容性设

aspnetcore 认证 <1.0>_阿杜聊编程-编程思维

概览 认证(Authentication):用来给用户颁发一个凭证,其包含一个用户的基本信息,这个凭证可以由第三方机构(STS)颁发,也可以由自己颁发。 认证就涉及到两个模型:票据模型和认证模型。 票据模型抽象出用户凭证 认证模型通过中间件的方式给用户颁发凭证。 票据模型 模型概览 Claim:声明 ClaimsIdentity:身份,包含多个声明 ClaimPrincipal:用户,包含多个

aspnetcore 鉴权 <2.0>_阿杜聊编程-编程思维

概览 授权(Authentization):通过获取凭证中的基本信息,来判断用户能做什么,不能做什么。 授权也是通过中间件实现的,而且中间件注册时,授权只能放在认证的后面,因为认证其实是给用户颁发票据,其实就是context.user初始化,在授权将检查上一步颁发的票据中对应身份的声明,看是否由权限访问。如果权限出现问题会调用认证模型中的对应方法。所以认证授权是紧密相关的。 授权设计模式 概览

nginx配置gzip.md_laggage-编程思维

参考 入门系列之在Nginx配置Gzip `gzip`是一种流行的数据压缩程序。您可以使用gzip压缩Nginx实时文件。这些文件在检索时由支持它的浏览器解压缩,好处是web服务器和浏览器之间传输的数据量更小,速度更快。 gzip不一定适用于所有文件的压缩。例如,文本文件压缩得非常好,通常会缩小两倍以上。另一方面,诸如JPEG或PNG文件之类的图像已经按其性质进行压缩,使用gzip压缩很难

asp.netcorewebapi入门_从零开始新建api项目_laggage-编程思维

图文说明,注意流量. 开发环境 Visual Studio 2019 .net core 2.x 打开VS,建立项目 建好之后就像下面这样 继续再建立两个.net core类库项目分别是 ApiStudy.Core 和 ApiStudy.Infrastructure 右击解决方案,新建项目. 选择 .NetCore类库项目. 输入项目名. ApiStudy.Core项目建立完成

nginx反向代理signalr_laggage-编程思维

asp.net core应用常常要通过nginx来反向代理, 普通的web api配置asp.net core反向代理比较常见, 如果在应用中集成了signalr, 如何使用nginx来反代呢? nginx配置 我用的nginx的版本: nginx/1.16.1 location /posthub { proxy_pass http://<signalr监

Jwt隐藏大坑,通过源码帮你揭秘-编程思维

前言 JWT是目前最为流行的接口认证方案之一,有关JWT协议的详细内容,请参考:https://jwt.io/introduction 今天分享一下在使用JWT在项目中遇到的一个问题,主要是一个协议的细节,非常容易被忽略,如果不是自己遇到,或者去看源码的实现,我估计至少80%的人都会栽在这里,下面来还原一下这个问题的过程,由于这个问题出现有一定的概率,不是每次都会出现,所以才容易掉坑里。 集成J

干掉RedisHelper,请这样用分布式缓存-编程思维

前言 我们在项目中使用Redis时通常是写一个单例模式的RedisHelper静态类,暴露一些常用的Get、Set等操作,在需要使用地方直接RedisHelper.StringGet(xx,xx)就可以了,这样虽然简单粗暴地满足我们对Redis的所有操作需要,但是这在Asp.Net Core的项目显得不是那么优雅了。首先你的RedisHelper静态类无法使用Asp.Net Core容器,又如何

HttpContext.TraceIdentifier那严谨的设计-编程思维

前言 Asp.Net Core中有一个不受人重视的属性HttpContext.TraceIdentifier,它在链路追踪中非常有用,下面是官方的定义: 在项目中一般会将该字段输出到每一条日志中,也可以将此Id作为通用响应字段返回前端,后续可以根据该属性和日志匹配,快速定位整个链路日志。在本地开发时我通常观察到该值的格式大概如下长这个样子0HLEACIU86PT6:0000000D,在

Asp.Net Core 7 preview 4 重磅新特性--限流中间件-编程思维

前言 限流是应对流量暴增或某些用户恶意攻击等场景的重要手段之一,然而微软官方从未支持这一重要特性,AspNetCoreRateLimit这一第三方库限流库一般作为首选使用,然而其配置参数过于繁多,对使用者造成较大的学习成本。令人高兴的是,在刚刚发布的.NET 7 Preview 4中开始支持限流中间件。 UseRateLimiter尝鲜 安装.NET 7.0 SDK(v7.0.100-previ

AspNetCore开源中间件-VueRouterHistory-编程思维

前言 用过VueRouter路由组件的应该都知道,VueRouter有hash和history两种模式。hash模式会在url中插入#,history模式下url则看上去更加简洁美观。如果想要支持history模式则必须要后端服务进行配合。 常用后端服务器配置方式请参考 后端配置例子 后端配置例子 注意:下列示例假设你在根目录服务这个应用。如果想部署到一个子目录,你需要使用 Vue CLI 的

【AspNetCore】【WebApi】扩展Webapi中的RouteConstraint中,让DateTime类型,支持时间格式化(DateTimeFormat)-编程思维

扩展Webapi中的RouteConstraint中,让DateTime类型,支持时间格式化(DateTimeFormat) 一、背景 大家在使用WebApi时,会用到DateTime为参数,类似于这样: //url: xxx/2016-09-08 [HttpGet("{date:datetime}")] public string Get(DateTime date) { return