.Net Framework

C#基础提升系列——C# LINQ

*爱你&永不变心* 提交于 2020-10-28 09:32:20
C# LINQ LINQ(Language Integrated Query,语言集成查询)。在C# 语言中集成了查询语法,可以用相同的语法访问不同的数据源。 命名空间 System.Linq 下的类 Enumerate 中定义了许多LINQ扩展方法,用于可以在实现了 IEnumerable<T> 接口的任意集合上使用LINQ查询。 扩展方法 C#扩展方法在静态类中声明,定义为一个静态方法,其中第一个参数定义了它扩展的类型,扩展方法必须对第一个参数使用 this 关键字。 public static class StringExtension { public static void WriteLine ( this string str ) { Console . WriteLine ( str ); } } 调用方式有两种: //方式一 "测试" . WriteLine (); //方式二 StringExtension . WriteLine ( "测试二" ); 采用方式一的方式调用,需要导入该扩展方法所在类的命名空间即可。在使用LINQ时,需要导入 System.Linq 命名空间。 示例实体定义 为了更好的说明LINQ的使用, 我们将使用具体的示例进行说明,在该示例中,分别定义如下几个实体: Racer.cs:该类用来显示赛车手信息 public class Racer

BeetleX之Websocket协议分析详解

你离开我真会死。 提交于 2020-10-28 07:31:06
Websocket应用协议已经普及多年了,它是HTTP1.1的内部升级协议,主要作用是补充HTTP1.1无法灵活地主动推送消息给客户端的缺陷问题。在这里主要介绍一下使用组件如何扩展一个完整的Websocket协议。 协议介绍 Websocket并不复杂,但协议文档内容还是很全面的,以下是协议原文 https://tools.ietf.org/html/rfc6455。其实一个简单的图可以看出Websocket协议结构。 在这里主要介绍组件是如何实现的就不详细介绍内容了。 存储顺序 在协议中有一个地方需要关注存储顺序,那就是消息长度描述。不同语言平台对于基础值类型的存储顺序都不一样分别是:大端和小端。这个协议使用的是大端存储顺序,但.NET则是使用小端存储顺序;所以使用组件解Weboskcet协议前要更改一下流读写的存储顺序。 IServer.Options.LittleEndian = false ; 组件可以通过配置来统一更改网络流针对大小端读写配置,应用中也可以默认用小端读出来后再移位转换也是可以。 分析状态 虽然Websocket已经有协议描述,但在分析过程中还是需要一些状态来处理。在TCP流中无法知道当前buffer里的情况,有可能不到一个消息帧,或存在多个消息帧;更有可能当前流的尾部可能只两个字节内容的playload len 127的情况;为了应对存在不同状态的网络流

Web开发利器-Fiddler简介

爱⌒轻易说出口 提交于 2020-10-28 06:54:35
1 什么是Fiddler? Fiddler是一个http调试代理,以代理服务器的方式,监听系统的Http网络数据流动, Fiddler可以也可以让你检查所有的http通讯,设置断点,以及Fiddle所有的“进出”的数据。 Fiddler还包含一个简单却功能强大的基于JScript .NET 事件脚本子系统,它可以支持众多的http调试任务。 你是不是曾经疑惑过你的web程序和IE是如何交互的?你是不是遇到过一些奇怪的而你又无法解决的性能瓶颈? 你是不是对那些发送给服务器端的cookie和那些你下载下来的被标记为可缓存的内容感到好奇? 无论你是从事什么开发,哪种语言,只要你想更深入的了解HTTP,这个工具就值得你去了解,它对前端开发工作是很有价值的。 Fiddler官方网站及下载可以在[http://www.fiddler2.com/fiddler2/]找到,安装过程很简单,这里就不介绍了。 同样,Fiddler支持插件扩展,常见插件可以在[http://fiddler2.com/add-on]找到。下面,简单介绍Fiddler的功能和常见应用场景。 2 Fiddler界面及功能介绍 Fiddler整个界面布局如上所示,下面再简单介绍一些特殊的概念: 代理模式,支持缓存模式和流模式: 缓冲模式(Buffering Mode Fiddler直到HTTP响应完成时才将数据返回给应用程序。

BeetleX之Websocket协议分析详解

时光总嘲笑我的痴心妄想 提交于 2020-10-28 03:02:57
Websocket应用协议已经普及多年了,它是HTTP1.1的内部升级协议,主要作用是补充HTTP1.1无法灵活地主动推送消息给客户端的缺陷问题。在这里主要介绍一下使用组件如何扩展一个完整的Websocket协议。 协议介绍 Websocket并不复杂,但协议文档内容还是很全面的,以下是协议原文 https://tools.ietf.org/html/rfc6455。其实一个简单的图可以看出Websocket协议结构。 在这里主要介绍组件是如何实现的就不详细介绍内容了。 存储顺序 在协议中有一个地方需要关注存储顺序,那就是消息长度描述。不同语言平台对于基础值类型的存储顺序都不一样分别是:大端和小端。这个协议使用的是大端存储顺序,但.NET则是使用小端存储顺序;所以使用组件解Weboskcet协议前要更改一下流读写的存储顺序。 IServer.Options.LittleEndian = false; 组件可以通过配置来统一更改网络流针对大小端读写配置,应用中也可以默认用小端读出来后再移位转换也是可以。 分析状态 虽然Websocket已经有协议描述,但在分析过程中还是需要一些状态来处理。在TCP流中无法知道当前buffer里的情况,有可能不到一个消息帧,或存在多个消息帧;更有可能当前流的尾部可能只两个字节内容的playload len 127的情况;为了应对存在不同状态的网络流

C#9.0 终于来了,您还学的动吗? 带上VS一起解读吧!

China☆狼群 提交于 2020-10-27 17:45:53
一:背景 1. 讲故事 好消息, .NET 5.0 终于在2020年6月10日发布了第五个预览版,眼尖的同学一定看到了在这个版本中终于支持了 C# 9.0 ,此处有掌声,太好了!!! .Net5官方链接 可以看到目前的C#9还是预览版,实现了一部分新语法供开发者提前尝鲜,从github的roslyn仓库上可以看到目前准备实现 17 个新特性,现阶段已经实现了 8 个,其中的 In Progress 表示正在开发中。 新特性预览 2. 安装必备 下载最新的 net5 sdk 吧: dotnet-sdk-5.0.100-preview.5.20279.10-win-x64.exe 下载最新的 visual studio 2019 preview 2 找好你自己的vs版本类型哦。。。 二:新特性研究 1. Target-typed new 这个取名一定要留给学易经的大师傅,没见过世面的我不敢造次,取得不佳影响时运,所谓 运去金成铁, 时来铁似金 ,不过大概意思就是说直接new你定义的局部变量的类型,用 issues 中总结的话就是: Summary: Allow Point p = new (x, y); Shipped in preview in 16.7p1. 接下来就是全部代码,看看 使用前 和 使用后 的具体差别。 class Program { static void Main

推荐一款万能抓包神器:Fiddler Everywhere

若如初见. 提交于 2020-10-27 16:54:14
搞IT技术的同行,相信没有几个人是不会抓包这项技能的(如果很不幸你中枪了,那希望这篇文章给你一些动力),市面上的抓包工具也有很多,常用的有: Charles 、 Fiddler 、 Burpsuite 、 WireShark 、 mitmproxy 如果从市场使用率来讲,特别是对于Windows用户来说, Fiddler 抓包使用人群占比最多。 由于 Fiddler 基于.NET开发,对于像我这类Mac系统的资深用户来讲,显然不太合适,为了解决Mac下使用Fiddler的问题,早在2016年官方出过一款名为 Fiddler for OS X Beta 1 尝试来解决这类问题, 但这款工具必须通过Mono才可以在Mac上使用。并且在Mac上使用是非常不稳定, 有非常多的问题。 所幸的是,在2018年,官方又进一步推出了一款名为: Fiddler Everywhere 的抓包工具,今天就给大家聊一聊这款工具。 虽然Mac下GUI抓包工具,首推Charles,但多掌握一项抓包工具,对自己肯定是没有坏处。 1. Fiddler Everywhere 介绍 从名称上来看,就大概能猜出它的寓意,官方也通过一段话,解释了 Fiddler Everywhere 的作用: Fiddler Everywhere is a web debugging proxy for any browser, any

.NET 5.0 RC 2 发布,正式版将在 11 月 .NET Conf 大会上发布

試著忘記壹切 提交于 2020-10-27 16:26:19
原文:http://dwz.win/ThX 作者:Richard 翻译:精致码农-王亮 说明: 1. 本译文舍弃了少许我实在不知道如何翻译但又不是很重要的语句。 2. 本文有不少超链接,由于微信公众号和头条平台外链会被剔除 URL 地址,所以原来本是超链接的内容会显示为纯文本,如果你需要这些信息可以移步到我的知乎和博客园阅读(搜索“精致码农”可找到我)。 今天(10月13日)我们发布了 .NET 5.0 候选版本 2(RC2),它是 11 月 .NET 5.0 正式版发布前的最后一个 RC 版本。RC2 是一个“上线”版本,表示你可以在生产环境中使用它。与此同时,我们正在找寻任何遗漏的关键 Bug 报告,这些 Bug 应该在最终发布前得到修复。 我们今天也发布了 ASP.NET Core 和 EF Core 的 RC2 版本。 你可以下载适用于 Windows、macOS 和 Linux 的 .NET 5.0 版本: 安装程序和二进制包 容器镜像 快速安装程序 发布说明 已知问题 GitHub Issue 跟踪 你需要最新的预览版 Visual Studio (包括 Visual Studio for Mac) 才能使用 .NET 5.0。 .NET 5.0 包括许多改进,特别是单文件应用程序、更小的容器镜像、功能更强的 JsonSerializer API

NEST教程系列:推断索引名

…衆ロ難τιáo~ 提交于 2020-10-27 14:58:04
NEST教程系列:三种推断索引名写法 目录 NEST教程系列:三种推断索引名写法 连接时设置默认索引 设置 .NET 类映射索引名 在创建请求的时候直接显式指定索引名 总结 连接时设置默认索引 构建 ConnectionSettings 时调用 DefaultIndex() 方法指定默认索引名。当无法为请求解析具体索引名时使用默认索引名 var settings = new ConnectionSettings() .DefaultIndex("defaultindex"); var client = new ElasticClient(settings); var searchResponse = client.Search<Project>(); 此时,当发送请求时实际 URL 如下 "http://localhost:9200/defaultindex/_search" 设置 .NET 类映射索引名 构建 ConnectionSettings 时调用 DefaultMappingFor<T>() 方法为类对象配置映射的索引名 var settings = new ConnectionSettings() .DefaultMappingFor<Project>(m => m .IndexName("projects") ); var client = new

DevExpress Data Access v20.1新版亮点:XPO

自闭症网瘾萝莉.ら 提交于 2020-10-27 14:57:43
DevExpress v20.1完整版下载 XPO - ORM Library 数据库架构迁移(CTP) 使用此版本,您可以在更改XPO数据模型后以增量方式更新数据库架构并保留现有数据。 您可以在ORM数据模型设计器或代码中在最新数据模型与现有数据库模式之间生成差异(SQL脚本),数据库模式迁移作为社区技术预览发布。 支持SQL Server和Always Encrypted 在此版本中,XPO添加了对SQL Server 2016+的 Always Encrypted 支持,现在您可以读取、更新、排序和过滤加密的列数据(最后两个操作由加密模式驱动)。 支持Microsoft.Data.SqlClient XPO现在支持Microsoft.Data.SqlClient驱动程序,对于新的.NET Framework和.NET Core项目,Microsoft建议使用此驱动程序而不是System.Data.SqlClient。 展望未来,Microsoft也将仅在Microsoft.Data.SqlClient中支持SQL Server的新功能。 DevExpress v20.1.4新版发布,上中文网立即体验新版~ DevExpress技术交流群2:775869749 欢迎一起进群讨论 来源: oschina 链接: https://my.oschina.net/u/3992677

GitHub 的 Action 判断仅在主仓库才执行脚本

梦想与她 提交于 2020-10-27 08:32:23
我有一个 GitHub 项目,这个项目配置了仅需要在源仓库才能执行的 Action 如推送 NuGet 等发布动作。如何在 Action 里面设置让 Fork 的仓库不执行 Action 的步骤 想要设置 Action 不在 Fork 的仓库执行,只需要添加 if 判断,判断当前执行的仓库和设置的相同,即可执行,否则不执行 在 GitHub 的 Action 的判断使用 if 方法,条件可以是判断 repository 或 repository_owner 的内容 如使用下面代码判断,让构建步骤仅在 lindexi/doubi 仓库执行 - name: Build with dotnet run: dotnet build --configuration Release if: github.repository == 'lindexi/doubi' 上面的 lindexi/doubi 的意思就是 用户名或组织名/项目名 这就会跟随用户的 Fork 仓库修改值。也就是小伙伴 frendguo 他 fork 了我的仓库,那么在他仓库里面执行的 action 拿到的 github.repository 的值是 frendguo/doubi 也就是判断逻辑不通过 判断不仅可以放在步骤里面,还可以写在 job 里面,让整个 job 都需要通过某个条件 jobs: build: runs