- 博客(197)
- 资源 (24)
- 收藏
- 关注
原创 ASP.NET Core基础(十一)——静态文件Static files
此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/http-requests?view=aspnetcore-5.0默认情况下,诸如HTML、css、图像、js之类的静态资源,应用不需要特殊处理直接提供出去。静态资源一般都存放在wwwroot文件夹中。1.提供静态文件1.1 提供wwwroot目录下的静态文件直接调用app.UseStaticFil.
2021-04-20 18:00:16 2213 1
原创 ASP.NET Core中使用IHttpClientFactory发出HTTP请求
此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/http-requests?view=aspnetcore-5.0IHttpClientFactory有以下几个优势:便于与Polly、Refit等第三方库继承。将委托添加到http请求管道中,实现类似asp.net core中间件的功能。因为复用HttpClientMessageHandler可.
2021-04-20 17:55:36 1470
原创 ASP.NET Core基础(十)——错误处理Handle Errors
此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/error-handling?view=aspnetcore-5.0框架具有用于处理错误的内置功能,如:开发人员异常页自定义错误页静态状态代码页启动异常处理1.异常处理lambdapublic void Configure(IApplicationBuilder app, IWebHost.
2021-04-20 17:52:27 527
原创 ASP.NET Core 基础(九)——路由Routing
此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/routing?view=aspnetcore-5.0定义:路由是负责匹配传入的http请求,然后进行发送到应用的可执行终结点(代码处理单元)。本文只介绍较低级别的路由信息,有关MVC中的路由和Razor中的路由参考:https://docs.microsoft.com/zh-cn/aspnet/c.
2021-04-20 17:44:52 1687
原创 ASP.NET Core 基础(八)——日志记录
日志组件包括提供器(Provider)和记录器(Logger)# 1.日志提供程序(Log provider)框架自带的日志provider有以下几种,前4个都在`CreateDefaultBuilder`里被添加进去,后续几个需要添加nuget包。- 控制台:即`Consol.WriteLine()`- 调试:即`Debug.WriteLine()`- EventSource:EventSource 提供程序写入名称为 Microsoft-Extensions-Logging 的跨平台事件源。
2021-04-20 16:55:17 1158
原创 ASP.NET Core基础(七)——配置Development、Staging、Production环境
执行环境:Development、Staging、Production是asp.net core中的高级概念。什么都不设置的话,默认为Production。通过设置ASPNETCORE_ENVIRONMENT或DOTNET_ENVIRONMENT环境变量的值来指定应用的运行环境。这个值你可以随便输入,后续可通过env.EnvironmentName来获取,当你设置为“Development”时,env.IsDevelopment()则为true。env.IsDevelopment()等价于env.IsEn
2021-04-20 16:19:53 1989
原创 ASP.NET Core基础(六)——appsettings.json配置项
此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0配置是使用一个或多个配置提供程序进行配置的。这个程序从如下的配置源中读取键值对,键不区分大小写:配置文件,如appsettings.json,MySettings.json等(见读取自定义配置文件章节)环境变量Azure Key .
2021-04-20 16:16:06 5921
原创 ASP.NET Core基础(五)——Web服务器
此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/?view=aspnetcore-5.0&tabs=windowsasp.net core 中的web服务器有三种:Kestrel、HTTP.sys、IIS HTTP。Kestrel:是默认的跨平台服务器,提供了最佳的性能和内存利用率。但是没有HTTP.sys中的一些高级功能,.
2021-04-20 11:32:31 1502
原创 ASP.NET Core基础(四)——IHostBuilder
此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-5.0主机封装了应用的所有资源,例如:HTTP服务器实现(Kestrel)、中间件、Logging、DI、Configuration等。主机分为两种:.Net 通用主机IHostBuilder:(推荐使用)。Program.cs的C.
2021-04-20 11:27:58 3068
原创 ASP.NET Core 基础(三)——中间件
此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-5.0中间件是一种装配到应用管道以处理请求和响应的组件,可以选择是否将请求传递到管道中的下一个组件而且也可以在管道的下一个组件前后执行工作。使用app.Run、app.Map、app.Use方法来配置请求委托。请求管道中的每个中间件负责调用管道中的.
2021-04-20 11:18:46 712
原创 ASP.NET Core 基础(二)——使用依赖注入
此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-5.0框架自带的一些符合Add{GROUP_NAME}约定的服务,如:AddControllers、AddDbContext、AddDefaultIdentity等,会自动注册该框架功能所需的所有服务。1.服务生存周期Tran.
2021-04-20 10:59:32 1635
原创 ASP.NET Core 基础(一)——Startup
Startup类作用:用来配置服务和请求管道。服务是一种提供应用功能的可重用组件,在ConfigureServices中注册服务,然后通过DI或ApplicationServices.GetRequriedService<T>()在整个应用中使用服务。 在Program.cs中构建主机(IHost)时指定了Startup类,并且框架会自动注册一些服务(具体有哪些见后续依赖注入章节),所以以下服务类型可以直接注入到Startup的构造函数:IWebHostEnvironment/IHos
2021-04-20 10:39:46 1158
原创 【CLR】.NET的GC垃圾回收
垃圾回收算法引用计数法:堆上的每个对象都维护了一个内存字段用来记录有多少个对象引用了自己,当这个字段的值变成0时,就意味着自己没有用了,可以被回收走了。当下一个GC周期到来时,他就会被回收走。这种算法存在因循环引用导致无法回收的问题。引用跟踪法:所有引用类型的变量都称作根。然后查看此根都引用了哪些对象,然后看这个对象里又有哪些根,这些根又引用了哪些对象。以此类推,这么一来就可以构建一个个引用跟踪图,这些树上的对象的同步块索引的某一位就标记为1。引用跟踪法回收流程除了回收线程之外,暂停其它所有线
2021-02-14 19:35:15 838
原创 【CLR】数据类型与装箱、拆箱
类型有:基元类型(int、long、bool等编译器直接支持的类型)、值类型、引用类型。所有的类型都派生自System.Object当我们new一个对象时,new操作实际做了这些事情:计算当前类型及其所有父类,一直计算到System.Object,中定义的所有实例字段需要的字节数,这些实例字段的“类型对象指针”和“同步块索引”对象所需要的字节数。从堆中分配这些字节,并初始化为0初始化类型对象指针和同步块索引调用类的构造函数类型对象指针:当我们想查看某个对象是属于什么类型时,一般会调用Get
2021-02-14 15:34:24 337
原创 【CLR】程序集查找与GAC
版本号如图:AssemblyVersion程序集版本号:存储在AssemblyDef清单元数据表中,虽然在文件属性面板中不显示,但是这个版本号对于CLR来说很重要,绑定强明明程序集时会用到这个,它唯一地标识了程序集。当A程序集引用了B程序集时,会将B程序集的AssemblyVersion嵌入到自己的AssemblyDef清单中,这样当CLR加载B的时候,就能准确的知道是程序集B的哪个版本。AssemblyFileVersion文件版本号:即属性面板中的文件版本,存储在Win32版本资源中,这个号仅
2021-02-13 21:49:32 488
原创 【CLR】JIT和NGen
JIT的工作流程JIT(Just in time)即时编译器:在执行时负责把编译生成的IL代码转换成本机代码(CPU指令)。对于以下代码来说:void Main(){ Console.WriteLine("hello"); Console.WriteLine("word");}当执行Main方法时,CLR会检测Main所使用到的类型,并分配一个数据结构用来存储对这些类型的访问。这段代码里只涉及到了Console类,所以Console类的所有方法都被存到了那个数据结构里,每个方法都是一个记录项
2021-02-06 18:16:29 397
原创 【C#】winform安全的跨线程访问控件
很多winform开发的新人,在子线程(非UI线程,线程id不为1)要更新控件的text属性时经常会遇到不允许跨线程访问控件的异常:Cross-thread operation not valid. Control “” accessed from a thread other than the thread it was created on。那么在这篇文章里就总结下如何该正确的跨进程访问控件。如果你从一个不同的线程要访问控件(包括Form),则必须调用控件的这四个方法Invoke、BeginInvo
2021-02-05 18:18:29 3735
原创 【.NET IoT】树莓派Raspberry Pi 3B+ 连接oled屏幕,SSD1306驱动
上次在我的树莓派上接入了达特的甲醛传感器,可以把测的甲醛数据上传到服务器上。但是数据还是不够直观,想看数据还得依赖网络、依赖web页面。所以后来买了一块0.9英寸的OLED屏幕,接到了树莓派上,分辨率是128x64,也用了一段时间了,基本满足需求,能够实时显示浓度、时间、网络状态。所以这次分享下用.NET CORE如何驱动一块OLED 屏幕。
2021-01-19 23:10:37 1760 1
原创 【C#】解决使用async/await时,await之后的方法没有resume到之前线程执行
一般来说,await会捕获当前同步上下文SynchronizationContext.Current,如果同步上下文为null,则继续捕获TaskScheduler.Current。await之后的代码会恢复到捕获的上下文继续执行。但是如果你的异步操作执行的比较早,例如在Application.Run(new Form1())之前执行: static class Program { /// <summary> /// The main entry po
2020-12-30 16:26:36 768
原创 【CLR】C#线程同步和锁-----看这篇就够了
多个线程同时访问共享数据的时候,线程同步能够防止线程损坏。之所以强调同时,是因为线程同步问题其实就是访问时间问题。如果有些数据会被多个线程访问,但是这几个线程访问的时间都是错开的,不会同时接触到数据,那完全就用不到线程同步。线程同步会遇到几个问题,所以能避免使用就别用:使用繁琐,容易出错:你需要清楚的明白哪些数据可能是会被同时访问的,然后用一个锁锁住它,确保一次只有一个线程能够访问。如果任何一块数据被漏了,那就会有问题。没法确定你所有用锁的方式一定正确:只能靠测试和经验。损害性能:获取和释放锁时要
2020-12-13 18:40:53 4264 2
原创 【CLR】C#线程基础
基础知识为什么要有线程?早期的操作系统没有线程的概念,也可以理解为一个操作系统只有一个线程在运行,这个线程既执行操作系统代码又执行应用程序代码。这样的设计会有一系列的问题:任务无法并行执行,长时间运行的任务会阻塞其他任务。有些程序的bug造成死循环,导致整个机器停止工作。所以,在后续的windows内核设计过程中引入了“进程”和“线程”。每个进程都被分配了一个虚拟的地址空间,而且一个进程使用到的代码和数据无法被其它进程所访问。进程也无法访问OS内核的代码和数据。这就保证了进程与进程之间,进程与
2020-11-22 17:34:00 432
原创 【EcmaScript6】笔记本
1.各种扩展方法stringES写法C#说明for (let chr of 'foo')toArray遍历字符let msg = "Hello, ${place}"$"hello,{place}"模板字符串s.includes()contains是否包含s.startWith()startWiths.endWith()endWiths.repeat(3)将s重复三遍输出s.padStart/s.padEnd同字符串补全
2020-11-22 15:09:45 333
原创 【TypeScript】笔记本
TypeScript for Java/C# ProgrammersThe TypeScript HandbookC#转typescript实战ts没有静态类,也没有单例对象赋值:interface Pointlike { x: number; y: number;}interface Named { name: string;}function printPoint(point: Pointlike) { console.log("x = " + poin..
2020-11-22 15:07:44 513
原创 【C#】使用AutoMapper-看这篇就够了
1.基本配置Profile配置public class OrganizationProfile : Profile{ public OrganizationProfile() { CreateMap<Foo, FooDto>(); }}使用:var configuration = new MapperConfiguration(cfg => { //cfg.CreateMap<Foo, Bar>(); cfg.AddProfile<
2020-11-20 10:22:04 36540 1
原创 【CLR】C#异步I/O
Windows如何执行I/O操作以读取磁盘文件类FileStream为例 ,展示下同步和异步I/O的执行流程同步IO调用FileStream类的Read方法后,你的线程将从托管代码转为win32用户模式代码。并调用win32的ReadFile函数,此函数将会非配一个叫做I/O请求包(I/O Request Packet,IRP)的数据结构,这个结构里包括:文件句柄,文件中的偏移量,Byte[]数组地址等信息。然后ReadFile会将你的线程从用户模式变为内核模式,向内核传递IRP数据,从而调用w
2020-10-18 00:11:08 783 7
原创 【CLR】C#线程池如何管理线程
前言线程池管理机制随着CLR的版本不断变化,最好将线程池看成一个黑盒。它不是针对某一种程序设计的,也不适合用某个程序去衡量它的性能。目前来看工作情况还是不错的,随着CLR版本的迭代也会不断进行优化,所以一般不需要对线程池做过多的调整。线程池如何管理工作者线程工作原理大致如图所示:其它线程将需要做的任务(task)放入到线程池的全局队列中,如ThreadPool.QueneUserWorkItem方法。工作者线程不断的消费本地队列,消费顺序是后进先出(类似于栈),每次从列头拿出一个task进行处
2020-10-13 09:26:28 1078 1
原创 解决PostSharp Essentials限制最多50个class使用的问题
因为PostSharp其他版本一直都是收费的,所以项目里用的都是Essentials版本,功能都是一样的,只不过有些其它的限制。比如每个project里不能有超过10个class使用PostSharp,每个solution里不能超过50个class使用PostSharp。在之前这个限制倒没怎么影响到我,但随着项目越来越大,50个class已经不够用了。怎么办? 网上搜了下破解方法,有的干脆不能...
2020-08-26 12:42:39 2850
原创 【Azure】Devops下载Azure Agent太慢?我们来手动配置
我们在Azure DevOps添加Deployment group的时候,一般是按照给的提示直接执行powershell命令添加agent。如果fq的话肯定没问题,不fq就靠你的运营商了,大部分情况下下载图里那个vsts-agent-win-x64-2.171.1.zip文件可能会耗费掉你所有的耐心。尤其是从薅羊毛薅来的ECS上下载的话,130MB+的文件下载个一天可能都下载不完。不过解决方法还是有的,仔细分析那段ps代码之后,发现最主要的就是后面那一段config代码,前面就是创建文件夹下载zip文
2020-07-11 21:24:12 1246 1
原创 【.NET IoT】把达特甲醛传感器DART WZ-S接到树莓派RaspberryPi 3 b+上
前一段时间经常能听到一些xx公寓装修甲醛超标,xxx公司程序员因xx公寓甲醛超标得绝症新闻,最近又刚买了一些家具,甚是担心这个问题。虽然相对于绿萝、活性炭、光触媒,经常通风才是除甲醛的王道。但是心里还是想知道室内的甲醛指数是多少,这样才能敦促自己多多通风。在t宝上搜了一圈,发现一个甲醛检测仪便宜的9.9,贵的上万,都号称绝对准确。看来水真的很深,于是乎跑到张大妈上又搜索了一番。发现有些up主,用...
2020-03-17 12:15:43 3788 6
原创 【.NET IoT】如何点亮树莓派Raspberry Pi 3b+上的一盏小灯
时隔多日如何使用树莓派GPIO的教程终于来了,然.NET Core 3.1版本都出来了。这次我的树莓派刷回了官方的Raspbian,
2020-03-16 17:52:52 2294 4
原创 Fiddler4设置脚本-保存抓包结果
1.点击顶部工具栏"Rules"然后点击“Customize Rules".2. 查找OnBeforeResponse方法在弹框中Ctrl+F查找 OnBeforeResponse方法:然后在方法的后面追加如下代码:var isJson=oSession.ResponseHeaders.ExistsAndContains("Content-Type","json");if (oSe...
2020-03-02 15:22:16 1523
原创 【Linux】win10 vnc远程连接ubuntu server 18.04 gnome桌面
简介越来越发现用命令行进行系统操作的效率真是低的一逼(原谅我脑容量有限,只记有用的东西)。现在远程ubuntu桌面的方式有一大把:VNC(Virtual Network Computing)、TeamViewer、win10自带的远程连接RDP。经过一番尝试之后还是发现VNC最好用而且还免费。在linux上基于VNC协议的实现工具有很多,如TigerVNC、TightVNC、Vino、x11VN...
2019-11-21 14:47:03 6638
原创 【Web】笔记本
1. Js判断是否滚动到了底部//获取滚动条当前的位置 function getScrollTop() { var scrollTop = 0; if (document.documentElement && document.documentElement.scrollTop) { ...
2019-10-25 10:12:25 352
原创 【ASP.NET Core】在Controller的构造函数中设置ViewBag无效,NullReferenceException: Object reference not set to an in
在Controller的构造函数中设置ViewBag无效,NullReferenceException: Object reference not set to an instance
2019-08-19 12:04:34 2387
原创 【C#】ElasticSearch环境搭建与使用
以前在.net里如果要做全文搜索的话,一般都会使用Lucene.net配合盘古分词。使用起来麻烦而且还不容易查看数据,后来就出现了ElastiSearch。ES也是基于Lucene并采用java编写, 相当于对Lucene做了一层封装,我们只需要调用ES相关API即可,配合Kibana数据可视化工具可以很方便的分析和统计数据。## 1.安装这里以windows环境为例,linux类似。移步到ES官网,下载ElasticSearch和Kiba
2019-07-16 19:22:25 9064 4
原创 System.InvalidOperationException:“操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null。对关系作出更改后,会将相关的外键属性设置为 null 值。如果外
前言今天用EF做更新操作时,抛出了System.InvalidOperationException:“操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null。对关系作出更改后,会将相关的外键属性设置为 null 值。如果外键不支持 null 值,则必须定义新的关系,必须向外键属性分配另一个非 null 值,或必须删除无关的对象。”的异常。经过调试之后发现了问题所在。报错代码: ...
2019-06-26 15:19:04 7679
原创 【ASP.NET】使用MiniProfiler分析ASP.NET MVC和EF的性能
简介MiniProfiler是一个简单且高效的小型分析器,可用于.NET,Ruby,Go和Node.js.MiniProfiler不是将自己附加到每一个方法上,因为这样会有强侵入性而且也不是专注于分析性能问题。它是一个ADO.NET的分析器,可以分析对于ADO.NET(SQL Server、Oracle等)、LINQ-to-SQL、EF(Code First&EF Core)的原始...
2019-06-19 17:23:14 1629
原创 《Architecting Modern Web Apps with ASP.NET Core2 and Azure》之七
Developing ASP.NET Core Apps“It’s not important to get it right the first time. It’s vitally important to get it right the last time.”-----------------Andrew Hunt and David ThomasMapping Request t...
2019-04-18 19:40:10 395
原创 《Architecting Modern Web Apps with ASP.NET Core2 and Azure》六
Common Client-Side Web TechnologiesWebsites should look good from the inside and out-------Paul CooksonSummaryASP.NET或其它Web应用程序一般都依赖于客户侧(client-side)的网络技术,比如HTML、CSS、JavaScript。利用关注点分离原则可以将一个复杂的网...
2019-04-15 13:03:07 495
原创 《Enterprise Application Pattern—using Xamarin.Forms》中文简述十——访问远程数据
Consuming RESTful APIs1. 发送GET请求客户端:public async Task<ObservableCollection<CatalogItem>> GetCatalogAsync(){ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpo...
2019-03-26 15:39:44 665
winfrom可拖动控件位置和大小
2017-08-31
SnapsToDevicePixels与UseLayoutRounding的比较
2017-08-22
NotificationDemoWPF自定义通知窗体样式
2017-08-18
18000-6C协议(全英文版)
2015-05-21
人月神话 pdf中文版
2011-11-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人