ASP.NET Core

TechEmpower Web 框架性能第19轮测试结果正式发布,ASP.NET Core在主流框架中拔得头筹

谁说胖子不能爱 提交于 2020-10-23 07:25:23
TechEmpower 第19轮编程语言框架性能排行榜2020年5月28日正式发布,详见官方博客: https://www.techempower.com/blog/2020/05/28/framework-benchmarks-round-19/ ,TechEmpower基准测试有许多场景(也称为测试类型),此次评测多了一个综合评分选项,把拥有完整测试覆盖的框架现在将具有综合 分数 ,这反映了测试项目类型的总体性能得分:JSON serialization, Single-query, Multi-query, Updates, Fortunes 和 Plaintext. 。对于每一轮,我们使每个测试类型的结果规范化,然后为每个测试类型应用主观权重(例如,Fortunes的权重比 Plaintext 高,因为Fortunes 是一种更现实的测试类型)。asp.net core排第6名,asp.net 排名倒数第二,第103名, 微软从倒数一路追赶到第一。 表上前缀T标签表示精选的主流编程语言 第1名 C++的drogon 9676分 第2名 Rust的actix 9064分 第6名 C#的ASP.NET Core 5659分 第29名 Go的Chi 2229分 第34名 Java的Spring 1867分 第73名 Nodejs的Express 821分 第94名

C# 数据操作系列

不问归期 提交于 2020-10-23 07:25:02
0. 前言 在前一篇中我们讲到了Dapper的应用,但是给我们的感觉Dapper不像个ORM更像一个IDbConnection的扩展。是的,没错。在实际开发中我们经常用Dapper作为对EF Core的补充。当然了Dapper并不仅仅只有这些,就让我们通过这一篇文章去让Dapper更像一个ORM吧。 1. Dapper Contrib Dapper Contrib 扩展了Dapper对于实体类的CRUD方法: 安装方法: 命令行: dotnet add package Dapper.Contrib NuGet: Install-Package Dapper.Contrib 使用: using Dapper.Contrib.Extensions; 这个是一个使得Dapper功能更强大的扩展包,因为支持了CRUD,所以需要对实体类添加配置,该扩展包使用Attribute作为依据进行相关映射配置: [Table("Model")] public class Model { [Key] [ExplicitKey] public int Id{get;set;} [Computed] public int Count {get;set;} [Write] public String Name{get;set;} } 这是所有的配置,Table用来声明是一个表,必须指定表名

技术人的持续学习成长之路

╄→гoц情女王★ 提交于 2020-10-22 17:53:43
近期有几位童鞋在公众号后台留言,希望我指点一下如何从码农进阶为大佬。我想说的是,我不是大佬,因此无法给你建议。但是,对于学习成长提高自己这方面,我想我应该还是有一点发言权。因此,我录制了一期骚年快享的视频《 技术人的持续学习成长之路 》,本文是该视频的文字稿,希望对你有帮助! 1、技术人成长之路是什么样的 理想中的样子 大多数技术人理想中的进阶路线都会像上图一样,从毕业之后的初级码农、中级码农、高级码农 再到 技术经理 甚至CIO/CTO。不过,正如这个圆圈一样,越往上进阶圈子越小,里面的人也就越少。我们大部分人还是在外层的三个圈子(初级、中级、高级码农)里边奋斗。 现实中的样子 现实中呢,可能随着年龄的增大,生活的压力也随之增大,时间管理的效率也随之降低,伴随而来的就是学习提高的欲望逐渐消灭。所以,可能身边的人大部分都有35岁的危机焦虑,因此可能会选择去送外卖、摆地摊之类的。 虽然大部分的时候都是程序员的自嘲打趣,但是现实就是这样,本质上还是处于信息爆炸时代的技术人们充满了焦虑,不时发出:“我太难了”! 2、你的焦虑,企业早就在经历 其实你的这些焦虑,大部分的企业早就开始在经历了。近年来,不确定性和不可预测性不断冲击各个行业的企业,企业的高层管理者们焦虑倍增。特别是在今年的疫情之下,大部分中小企业的高官们比你还难。但是,他们越来越发现在企业前方市场和企业内部支撑之间的一个冲突

学完这篇依赖注入,与面试官扯皮就没有问题了。

吃可爱长大的小学妹 提交于 2020-10-22 16:02:10
IOC: Inversion Of Control 控制反转 DI: Dependency Injection 依赖注入 1.控制反转 Inversion Of Control 的前世今生 1.1 IOC理论产生的背景 讨论控制反转之前,先看看软件系统提出 控制反转 的前世今生。 一个完整精密的软件系统,组件之间就像齿轮,协同工作,相互耦合。 一个零件不正常,整个系统就崩溃了。 系统对象之间耦合关系无法避免,在项目规模和复杂度变大的情况下,管理类之间的依赖关系将会很复杂。 对象之间耦合度很高的系统,架构师和开发人员对于系统的修改,必然会出现牵一发而动全身的情形。 对象之间耦合性依赖,单元测试很复杂。 1.2 IOC理论 软件专家为此提出 IOC理论 ,用来实现对象之间的解耦。 再来看看,控制反转(IOC)到底为什么要起这么个名字?我们来对比一下: 软件系统在没有引入IOC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。 软件系统在引入IOC容器之后,这种情形就完全改变了,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。 通过前后对比,我们不难看出:

[C#.NET 拾遗补漏]09:数据标注与数据校验

点点圈 提交于 2020-10-22 02:13:45
数据标注(Data Annotation)是类或类成员添加上下文信息的一种方式,在 C# 通常用特性(Attribute)类来描述。它的用途主要可以分为下面这三类: 验证 Validation:向数据添加验证规则 展现 Display:指定数据如何呈现给用户 模型 Modelling:添加关于用法和与其它类的关系信息 下面是一个用来验证和展现用户信息的一个 Model: class Kid { [Range(0, 18)] // 年龄不能超过18岁,不能为负数 public int Age { get; set; } [StringLength(MaximumLength = 50, MinimumLength = 3)] // 名称的长度不能超过 50,不能小于 3 public string Name { get; set; } [DataType(DataType.Date)] // 生日将作为日期展示 (不带时间) public DateTime Birthday { get; set; } } 数据标注的展现的用途主要在早期的 ASP.NET 和 ASP.NET MVC 等框架中使用。例如,在 ASP.NET MVC 中,Razor 引擎会根据 Model 属性的 DataType 特性动态生成不同类型的表单元素。不过,现在这类用途除了 WPF(比如

界面控件DevExpress 7月版本已更新,重要更改看这里

怎甘沉沦 提交于 2020-10-19 09:22:11
DevExpress文档控件公开课第一弹报名通道开启,40分钟教你入门(Spreadsheet)控件! DevExpress Universal Subscription 拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。 屡获大奖的软件开发平台DevExpress Universal 2020年全新首发v20.1,最新版拥有众多新产品和数十个具有高影响力的功能,可为桌面、Web和移动应用提供直观的解决方案,全面解决各种使用场景问题。 DevExpress v20.1.6完整版下载 具体更新内容如下: 此列表包含v20.1.6中引入的所有重大更改。 ASP.NET Core Dashboard/HTML JS Dashboard/MVC Dashboard UI T900780 - measures的配色方案定义已更改 Data Library API T902153 - IObjectLayerAsync,IDataLayerAsync,IDataStoreAsync接口已更改 DXSpreadsheet for WPF/Spreadsheet Document API UI T906566 -

使用Azure Application Insignhts监控ASP.NET Core应用程序

可紊 提交于 2020-10-18 08:26:22
Application Insignhts是微软开发的一套监控程序。他可以对线上的应用程序进行全方位的监控,比如监控每秒的请求数,失败的请求,追踪异常,对每个请求进行监控,从http的耗时,到SQL查询的耗时,完完整整的被记录下来。当对程序进行优化跟排错时非常好使。它原来是visualstudio online的一个服务,现在合并进了Azure,作为Azure Monitor的一个组件。虽然合并进了Azure,但是Application Insignhts还是免费的。 什么是Application Insignhts Application Insights 是 Azure Monitor 的一项功能,是面向开发人员和 DevOps 专业人员的可扩展应用程序性能管理 (APM) 服务。 使用它可以监视实时应用程序。 它将自动检测性能异常,并且包含了强大的分析工具来帮助诊断问题,了解用户在应用中实际执行了哪些操作。 它旨在帮助持续提高性能与可用性。 它适用于本地云、混合云或任何公有云中托管的各种平台(包括 .NET、Node.js、Java 和 Python)上的应用。 它与 DevOps 进程集成,并且具有与不同开发工具的连接点。 可以通过与 Visual Studio App Center 集成来监视和分析移动应用的遥测数据。 摘自微软文档: app-insights

Swashbuckle.AspNetCore3.0的二次封装与使用

南笙酒味 提交于 2020-10-18 02:36:52
关于 Swashbuckle.AspNetCore3.0 一个使用 ASP.NET Core 构建的 API 的 Swagger 工具。直接从您的路由,控制器和模型生成漂亮的 API 文档,包括用于探索和测试操作的 UI。 项目主页: https://github.com/domaindrivendev/Swashbuckle.AspNetCore 项目官方示例: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/tree/master/test/WebSites 之前写过一篇 Swashbuckle.AspNetCore-v1.10 的使用 ,现在 Swashbuckle.AspNetCore 已经升级到 3.0 了,正好开新坑(博客重构)重新封装了下,将所有相关的一些东西抽取到单独的类库中,尽可能的避免和项目耦合,使其能够在其他项目也能够快速使用。 运行示例 封装代码 Swagger封装相关源码: https://github.com/moxycoding/moxy.api.dotnet/tree/master/src/Core/Moxy.Swagger 参考下面步骤可自行封装 1. 新建类库并添加引用 我引用的版本如下 <PackageReference Include="Microsoft

造轮子-AgileConfig基于.NetCore的一个轻量级配置中心

核能气质少年 提交于 2020-10-17 05:39:52
微服务确实是行业的一个趋势,我自己也在把一些项目往微服务架构迁移。玩微服务架构配置中心是一个绕不过去的东西,有很多大牌的可以选,比如spring-cloud-config,apoll,disconf等等。而我为什么还要造一个轮子呢?一来这些都不是.net实现的,我就想试试用.net core实现一个,而且他们也对.net不太友好,也只有apoll提供了官方的.net客户端。二来这些组件都太重量级了,比如apoll,光跑起来就要部署多个节点(admin,portal,meta sevice)还要依赖eureka。很多旧的项目往微服务迁移的时候并不是一下次全部调整完成的,可能是一步步来的,比如先把所有的服务都容器化,并没有使用微服务全家桶。而且有的项目也不需要微服务全家桶,毕竟微服务不是银弹,很多项目单体结构就足够了,有些项目传统的SOA架构也可以了。(唠叨一句,那种毫无流量毫无并发的项目,几人几天就搞完的强上微服务真的好吗?)但是这些项目也可能是分布式的,容器化部署的,那么这些项目我觉得也是需要配置中心的,因为在分布式、容器化环境下更改配置实在是太麻烦了。可以说配置中心并不是微服务独有的。基于以上原因我提炼了一些配置中心必备的功能,做的尽量简单(陋),开发了AgileConfig,为.net core的生态尽一份绵薄之力。 Github求star: AgileConfig

认证授权方案之授权揭秘 (上篇)

删除回忆录丶 提交于 2020-10-15 19:55:26
一、前言 回顾: 认证授权方案之授权初识 从上一节中,我们在对授权系统已经有了初步的认识和使用,可以发现,asp.net core为我们提供的授权策略是一个非常强大丰富且灵活的认证授权方案,能够满足大部分的授权场景。 在ConfigureServices中配置服务:将授权服务添加到容器 public void ConfigureServices(IServiceCollection services) { services.AddAuthorization(options => { options.AddPolicy("customizePermisson", policy => policy .Requirements .Add(new PermissionRequirement("user"))); }); //此外,还需要在 IAuthorizationHandler 类型的范围内向 DI 系统注册新的处理程序: services.AddScoped<IAuthorizationHandler, PermissionRequirementHandler>(); } 在Configure中注册管道:运行使用调用方法来配置Http请求管道 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)