提交
This commit is contained in:
parent
941bd1526f
commit
6ceb1ba7e8
@ -404,13 +404,13 @@ public ResultUtil GetUserInfo()
|
|||||||
|
|
||||||
三大拦截器
|
三大拦截器
|
||||||
|
|
||||||
`AuthorizeAttribute`
|
|
||||||
|
|
||||||
认证拦截器
|
|
||||||
|
|
||||||
`ActionFilterAttribute`
|
认证拦截器 `AuthorizeAttribute`
|
||||||
|
|
||||||
方法拦截器
|
|
||||||
|
|
||||||
|
方法拦截器 `ActionFilterAttribute`
|
||||||
|
|
||||||
```c#
|
```c#
|
||||||
using Microsoft.AspNetCore.Mvc.Controllers;
|
using Microsoft.AspNetCore.Mvc.Controllers;
|
||||||
@ -542,6 +542,6 @@ builder.Services.AddScoped<AuthFilter>();
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
`ExceptionFilterAttribute`
|
|
||||||
|
|
||||||
异常拦截器
|
|
||||||
|
异常拦截器 `ExceptionFilterAttribute`
|
||||||
|
|||||||
@ -103,7 +103,6 @@ using System.Data;
|
|||||||
DataTable dt = new DataTable();
|
DataTable dt = new DataTable();
|
||||||
//创建一个名为"Table_New"的空表
|
//创建一个名为"Table_New"的空表
|
||||||
DataTable dt = new DataTable("Table_New");
|
DataTable dt = new DataTable("Table_New");
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 列 DataColumn
|
## 列 DataColumn
|
||||||
@ -138,10 +137,9 @@ workTable.PrimaryKey = columns;
|
|||||||
//比如 表达式类型 示例
|
//比如 表达式类型 示例
|
||||||
// 比较 “总计 >= 500”
|
// 比较 “总计 >= 500”
|
||||||
// 计算 "UnitPrice * Quantity"
|
// 计算 "UnitPrice * Quantity"
|
||||||
// 聚合 Sum(Price)
|
// 聚合 Sum(Price)
|
||||||
workTable.Columns.Add("Total", typeof(Double));
|
workTable.Columns.Add("Total", typeof(Double));
|
||||||
workTable.Columns.Add("SalesTax", typeof(Double), "Total * 0.086");
|
workTable.Columns.Add("SalesTax", typeof(Double), "Total * 0.086");
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 复制DataTable
|
## 复制DataTable
|
||||||
@ -196,3 +194,115 @@ myRow = ObjectTable.LoadDataRow(newRow, true);//标志要设置为true,表示添
|
|||||||
ObjectTable.EndLoadData();
|
ObjectTable.EndLoadData();
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# 反射(Reflection)
|
||||||
|
|
||||||
|
> 反射是.NET中的重要机制,通过反射可以得到\*.exe或\*.dll等程序集内部的接口、类、方法、字段、属性、特性等信息,还可以动态创建出类型实例并执行其中的方法。
|
||||||
|
>
|
||||||
|
> 反射指程序可以访问、检测和修改它本身状态或行为的一种能力。
|
||||||
|
>
|
||||||
|
> 程序集包含模块,而模块包含类型,类型又包含成员。反射则提供里封装程序集、模块和类型的对象。
|
||||||
|
>
|
||||||
|
> 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
|
||||||
|
|
||||||
|
通过反射获取类型
|
||||||
|
|
||||||
|
描述:有三种类型
|
||||||
|
|
||||||
|
1. 通过`typeof`获取某个值的类型
|
||||||
|
|
||||||
|
```c#
|
||||||
|
System.Type personType=typeof(Person);
|
||||||
|
System.Type heroType=typeof(Framework.Hero);
|
||||||
|
```
|
||||||
|
|
||||||
|
2. 通过一个对象获取该对象所对应的类的类型、
|
||||||
|
|
||||||
|
```c#
|
||||||
|
Framework.hero dmxy =new Framework.hero();
|
||||||
|
System Type=dmxy.GetType();
|
||||||
|
```
|
||||||
|
|
||||||
|
3. 通过类的名称字符串获取对应的类型
|
||||||
|
|
||||||
|
```c#
|
||||||
|
System.Type strType =System.Type.GetType("Person");
|
||||||
|
System.Type strType =System.Type.GetType("Framework.Hero");
|
||||||
|
```
|
||||||
|
|
||||||
|
## Type类
|
||||||
|
|
||||||
|
属性
|
||||||
|
|
||||||
|
- Name 数据类型名
|
||||||
|
|
||||||
|
- FullName 数据类型的完全限定名
|
||||||
|
|
||||||
|
- Namespace 定义数据类型的命名空间名
|
||||||
|
|
||||||
|
- IsAbstract 指示该类型是否为数组
|
||||||
|
|
||||||
|
- IsArray 指示该类型是否为数组
|
||||||
|
|
||||||
|
- IsClass 指示该类型是否为类
|
||||||
|
|
||||||
|
- IsEnum 指示该类型是否为枚举
|
||||||
|
|
||||||
|
- IsInterface 指示该类型是否为接口
|
||||||
|
|
||||||
|
- IsPublic 指示该类型是否为共有的
|
||||||
|
|
||||||
|
- IsSealed 指示该类型是否是密封类
|
||||||
|
|
||||||
|
- IsValueType 指示该类型是否是密封类
|
||||||
|
|
||||||
|
- IsValueType 指示该类型是否是值类型
|
||||||
|
|
||||||
|
- BaseType 父类类型
|
||||||
|
|
||||||
|
- AssemblyQualifiedName 程序集+命名空间+类名 | 是Type.GetType(str)中的字符串
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
private void ShowTypeField()
|
||||||
|
{
|
||||||
|
// 获取类型
|
||||||
|
Type heroType = typeof(Framework.Hero);
|
||||||
|
// 查看类型的名字
|
||||||
|
Console.WriteLine("Name:" + heroType.Name);
|
||||||
|
//查看类型的全名
|
||||||
|
Console.WriteLine("FullName:" + heroType.FullName);
|
||||||
|
//查看程序集名称
|
||||||
|
Console.WriteLine("Assembly:" + heroType.Assembly);
|
||||||
|
//加上程序集的全名
|
||||||
|
Console.WriteLine("Ass-Name:" +heroType.AssemblyQualifiedName);
|
||||||
|
//获取该类型的父类
|
||||||
|
Console.WriteLine("BaseType:" + heroType.BaseType.BaseType);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 方法
|
||||||
|
|
||||||
|
- GetMember(),GerMembers()
|
||||||
|
|
||||||
|
1.返回MemberInfo类型,用于取得该类的所有成员的信息
|
||||||
|
|
||||||
|
2.GetConstructor(),GetConstructors() -返回ConstructorInfo类型,用于取得该类构造函数的信息
|
||||||
|
|
||||||
|
- GetEvent(),GetEvents()
|
||||||
|
|
||||||
|
返回EventInfo类型,用于取得该类的事件的信息
|
||||||
|
|
||||||
|
- GetInterface(),GetInterfaces()
|
||||||
|
|
||||||
|
返回InterfaceInfo类型,用于取得该类实现的接口的信息
|
||||||
|
|
||||||
|
- GetField(),GetFields()
|
||||||
|
|
||||||
|
返回FieldInfo类型,用于取得该类的字段(成员变量)的信息
|
||||||
|
|
||||||
|
- GetPropeerty(),GetProperties()
|
||||||
|
|
||||||
|
返回ProperyInfo类型,用于取得该类的属性的信息
|
||||||
|
|
||||||
|
- GetMethod(),GetMethods()
|
||||||
|
|
||||||
|
返回MethodInfo类型,用于取得该类的方法的信息
|
||||||
|
|||||||
@ -1861,6 +1861,78 @@ yarn
|
|||||||
| npm install [package]@[version] | yarn add [package]@[version] | 安装指定版本的包 |
|
| npm install [package]@[version] | yarn add [package]@[version] | 安装指定版本的包 |
|
||||||
| npm rebuild | yarn install --force | 重新下载所有包 |
|
| npm rebuild | yarn install --force | 重新下载所有包 |
|
||||||
|
|
||||||
|
# npx
|
||||||
|
|
||||||
|
npm大家都知道,是node的包管理器,npx虽然也见过,但似乎较少用过,那npx到底是什么呢?
|
||||||
|
|
||||||
|
npx是npm5.2.0版本新增的一个工具包,定义为npm包的执行者,相比npm,npx会自动安装依赖包并执行某个命令。
|
||||||
|
|
||||||
|
假如我们要用create-react-app脚手架创建一个react项目,常规的做法是先安装create-react-app,然后才能使用create-react-app执行命令进行项目创建。
|
||||||
|
|
||||||
|
```shell
|
||||||
|
// 第一步
|
||||||
|
npm i -g create-react-app
|
||||||
|
// 第二步
|
||||||
|
create-react-app my-react-app
|
||||||
|
```
|
||||||
|
|
||||||
|
有了npx后,我们可以省略安装create-react-app这一步。
|
||||||
|
|
||||||
|
```shell
|
||||||
|
// 使用npx
|
||||||
|
npx create-react-app my-react-app
|
||||||
|
```
|
||||||
|
|
||||||
|
npx会在当前目录下的`./node_modules/.bin`里去查找是否有可执行的命令,没有找到的话再从全局里查找是否有安装对应的模块,全局也没有的话就会自动下载对应的模块,如上面的create-react-app,npx会将create-react-app下载到一个临时目录,用完即删,不会占用本地资源。
|
||||||
|
|
||||||
|
> npm自带npx,可以直接使用,如果没有可以手动安装一下:npm i -g npx
|
||||||
|
|
||||||
|
## npx命令参数
|
||||||
|
|
||||||
|
### --no-install
|
||||||
|
|
||||||
|
--no-install 告诉npx不要自动下载,也意味着如果本地没有该模块则无法执行后续的命令。
|
||||||
|
|
||||||
|
```shell
|
||||||
|
npx --no-install create-react-app my-react-app
|
||||||
|
|
||||||
|
// not found: create-react-app
|
||||||
|
```
|
||||||
|
|
||||||
|
### --ignore-existing
|
||||||
|
|
||||||
|
--ignore-existing 告诉npx忽略本地已经存在的模块,每次都去执行下载操作,也就是每次都会下载安装临时模块并在用完后删除。
|
||||||
|
|
||||||
|
### -p
|
||||||
|
|
||||||
|
-p 用于指定npx所要安装的模块,它可以指定某一个版本进行安装:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
npx -p node@12.0.0 node index.js
|
||||||
|
```
|
||||||
|
|
||||||
|
-p 还可以用于同时安装多个模块:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
npx -p lolcatjs -p cowsay [command]
|
||||||
|
```
|
||||||
|
|
||||||
|
### -c
|
||||||
|
|
||||||
|
-c 告诉npx所有命令都用npx解释。
|
||||||
|
|
||||||
|
```shell
|
||||||
|
npx -p lolcatjs -p cowsay 'cowsay hello | lolcatjs'
|
||||||
|
```
|
||||||
|
|
||||||
|
这样运行会报错,因为第一项命令cowsay hello默认有npx解释,但第二项命令localcatjs会有shell解释,此时lolcatjs并没有全局安装,所以就报错了。这时候可以用 -c 参数来解决。
|
||||||
|
|
||||||
|
```shell
|
||||||
|
npx -p lolcatjs -p cowsay -c 'cowsay hello | lolcatjs'
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 加密解密
|
# 加密解密
|
||||||
|
|
||||||
## jsencrypt
|
## jsencrypt
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user