暂时未有相关云产品技术能力~
专注于.NET领域教程,WPFASP.NET Core
基于.net8的Blazor系统教程
WPF数据绑定系统不仅需要绑定功能,还需要能够处理大量数据而不会降低显示速度和消耗大量内存,WPF提供了相关的控件以提高性能,所有继承自`ItemsControl`的控件都支持该技术。
Blazor_WASM之4:路由
Blazor WebAssembly项目模板可选两种,Blazor WebAssemblyAPP及Blazor WebAssemblyAPP-Empty
Blazor概述
Razor 是一种标记语法,用于将基于 .NET 的代码嵌入网页中。 Razor 语法由 Razor 标记、C# 和 HTML 组成。 Razor 可在 Razor 组件 文件 (.razor) 中找到。 Razor 语法类似于各种 JavaScript 单页应用程序 (SPA) 框架(如 Angular、React、VueJs 和 Svelte)的模板化引擎,本文针对Razor文件介绍Razor常用语法。
* 变量 和 数据 都是保存在 **内存** 中的 * 在 `Python` 中 **函数 的 参数传递** 以及 **返回值** 都是靠 **引用** 传递的
* 所谓**函数**,就是把 **具有独立功能的代码块** 组织为一个小模块,在需要的时候 **调用** * 函数的使用包含两个步骤: 1. 定义函数 —— **封装** 独立的功能 2. 调用函数 —— 享受 **封装** 的成果 * **函数的作用**,在开发程序时,使用函数可以提高编写的效率以及代码的 **重用**
面向对象基本概念 - 我们之前学习的编程方式就是 **面向过程** 的 - **面相过程** 和 **面相对象**,是两种不同的 **编程方式**
本文使用Anaconda+VSCode配置PyQt5环境,在开始之前新建Anaconda的虚拟环境,如果不需要虚拟环境可以直接使用默认的Base环境。另外针对ui文件转py文件报错ImportError: DLL load failed: 找不到指定的模块给出了解决办法
在程序开发中,一共有三种流程方式: 顺序** —— **从上向下**,顺序执行代码 分支** —— 根据条件判断,决定执行代码的 **分支** 循环** —— 让 **特定代码 重复** 执行
判断的定义 * 如果 **条件满足**,才能做某件事情, * 如果 **条件不满足**,就做另外一件事情,
在 Python 中 `*` 运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果。`+`运算符可以让两个字符串相加
人生苦短,我用 Python —— Life is short, you need Python
## Anaconda 简介 + 自带Python解释器 + Anaconda 附带了一大批常用数据科学包 + 150 多个科学包及其依赖项 + Anaconda 是在 conda(一个包管理器和环境管理器)上发展出来的,包含了虚拟环境管理工具 + 通过虚拟环境可以使不同的Python或者开源库的版本同时存在
nuget安装`Microsoft.AspNetCore.Authentication.JwtBearer`
+ put:对所有资源进行更新 + patch:对部分资源进行更新 put使用方法和post相同,但是put是幂等的。
在操作方法的参数前面使用Attribute
+ 无状态 + 面向资源,即访问地址时使用的是名词形式 + 使用HTTP动词
C#的优势在于window下的开发,不仅功能强大而且开发周期短。而python则有众多的第三方库,可以避免自己造轮子,利用C#来做界面,而具体实现使用python来实现可以大大提高开发效率。本文介绍如何使用`pythonnet`来执行python脚本,使用`pythonnet`既可以具有较高的交互性,又可以使用第三方python库,同时可以将程序需要的python环境及第三方库打包到软件中,避免用户进行python的环境配置。
某些场景下,需要服务端向客户端发送请求。.net中采用封装了WebSocet的SignalR进行消息的处理。WebSocket独立于http,但是WebSocket服务器一般都部署在Web服务器上,所以需要借助http完成初始握手,并共享http的端口。
领域(近似理解为实现某个功能的多个模型)事件可以切断领域模型之间的强依赖关系,事件发布后,由事件的处理者决定如何响应事件,以便于实现事件发布和事件处理的解耦。
贫血模型:一个类中只有属性或者成员变量 充血模型:一个类中除了属性和成员变量,还有方法
MVVMLight已经停止维护,可以考虑MVVMToolkit来替代,MVVMToolkit官方文档两个框架的基本使用方法类似,下面介绍一下不同之处(建议查看一下上一篇关于MVVMLight的文章)。
MvvmLight是一款应用广泛的MVVM框架
有些工作是需要后台运行的,比如每天凌晨备份数据库。ASP.NET Core提供了托管服务来供我们编写后台代码。 托管服务只需要实现`IHostedService`即可,一般在开发时编写继承自`BackgroundService`的类,该类不进实现了`IHostedService`接口,并且处理了任务取消等逻辑,我们只需实现`BackgroundService`中定义的`ExecuteAsync`方法即可。
当遇到用户被删除、用户在另一个设备上登陆等场景需要将JWT提前撤回,但是JWT是保存在客户端,无法在服务器中进行删除。 解决思路是在用户表中增加一列JWTVersion,用来存储最后一次发放出去的令牌版本号,每次登陆、发放令牌的时候都让JWTVersion自增,当服务器收到客户端提交的JWT后,将客户端的JWTVersion和服务器的进行比较,如果客户端的值小于服务器中的值则过期
经典的保持登陆状态的办法是Session,也就是用户登陆后,服务器产生唯一标识SessionId,并把SessionId和登陆的用户信息保存在服务器内存中,通时将SessionId发送给浏览器,当浏览器再次访问的时候,http请求中便携带了SessionId,服务器根据该Id在内存中取到用户信息,实现了登陆功能。
ASP.NET Core提供了标识框架,采用RBAC(基于角色的访问控制),内置了对用户、角色等表的管理及相关接口,框架中提供了`IdentityUser<TKey>`和`IdentityRole<TTKey>`两个实体类型,Tkey为主键类型。
ASP.NET Core只是完成了HTTP请求调度、报文解析等必要的工作,像检查用户身份、设置缓存报文头等操作都是在中间件中完成,中间件就是ASP.NET Core的一个组件,由前逻辑、next、后逻辑3部分组成,多个中间件组成一个管道,一个系统中可以有多个管道。ASP.NET Core执行的过程就是http请求和响应按照中间件组装的顺序在中间件之间流转的过程。
筛选器运行开发人员在ASP.NET Core特定的位置执行我们自己的代码,比如在控制器的操作方法之前执行数据检查,或者在ActionResult执行的时候向响应报文头中加入自定义数据。
缓存是一个用来保存数据的区域,从缓存中读取数据要比从数据源读取数据的速度快很多。如果可以从缓存中获取要获取的数据则称之为“缓存命中”,多次请求命中的请求占全部请求的百分比叫做“命中率”,如果数据源中的数据保存到了缓存后,发生了变化则称之为“缓存数据不一致”
7.3EF Core与ASP.NET Core集成
7.2配置系统与ASP.NET Core集成
ASP.Net中Program.cs文件中,第一行var builder = WebApplication.CreateBuilder(args)返回的类型为WebApplicationBuilder类型,在该类型中Services属性为IServiceCollection类型,也就是容器接口,一般把服务都注册到这个Service属性里面
ASP.NET Core Web API技术选择
讲解HTTP开发中Restful风格
ASP.NET Core中,严格来讲只有一个Asp.net Core MVC一个框架,Asp.net Core MVC既支持基于视图的MVC开发,也支持Web API和Razor Pages开发。
本文详细讲解WPF,MVVM开发,实现UI与逻辑的解耦。
本文详细讲解WPF,MVVM开发,实现UI与逻辑的解耦。
表达式树对应`Expression<TDelegate>`类型,从Lambda表达式生成表达式树
上文讲了实体类的跟踪以便执行SaveChanges操作。但是如果是查询操作,则实体类便不需要进行跟踪。
对普通集合使用where等方法查询出来的返回值为IEnumerable类型 但是对DbSet使用用where等方法出查询出来的返回值为IQueryable类型
关系配置
数据库迁移
本文主要讨论实体类和数据表是如何映射的,以及实体类中的属性是如何与数据表中的列映射的
.Net Core配置系统支持文件(Json、XML、INI)、注册表、环境变量、命令行、AZure Key Vault等。
传统开发中,对象都是开发者创建组装,开发者必须了解各类的使用方法且某些类的耦合度较高,例如想把sql serve数据库改为MySql数据库则需要更改某些代码。控制反转的目的是让框架完成对象的创建和组装。从“我创建对象”编程“我要对象”
.net core异步编程
.net core概述