C#与.NET技术
实践与教程

专注分享C#、ASP.NET Core、Azure、Blazor等微软技术栈的开发教程、架构设计和最佳实践

113
技术文章
8
文章分类
512
技术标签
29029
累计字数
Cookie、session、token、jwt简单说明
后端开发
2019-09-15 0k

Cookie、session、token、jwt简单说明

【Cookie】:是由服务器端生成,发送给客户端的文本文件,下次请求时自动发送给服务端。 【session】:在服务端保存用户的状态,并用一个cookie标识进行存取 【token】:服务端把用户信息和密钥通过加密算法生成一个字符串 【jwt】:一种基于 JSON 的开放标准,一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。 可以理解是一种特殊的token

http Cookie Session
阅读更多
npm和cnpm的各种源以及切换管理工具nrm
前端开发
2019-09-15 0k

npm和cnpm的各种源以及切换管理工具nrm

npm 允许用户从NPM服务器下载第三方包到本地使用。 允许用户从NPM服务器下载并安装第三方命令行程序到本地使用。 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用 npm命令 npm -v 来测试是否成功安装 查看当前目录已安装插件:npm list 更新全部插件: npm update [ --save-dev ] 使用 npm 更新对应插件: npm update <name> [ -g ] [ --save-dev] 使用 npm 卸载插件: npm uninstall <name> [ -g ] [ --save-dev ] cnpm 淘宝团队做的国内镜像,因为npm的服务器位于国外可能会影响安装。淘宝镜像与官方同步频率目前为 10分钟 一次以保证尽量与官方服务同步。 安装:命令提示符执行 npm install cnpm -g --registry=https://registry.npm.taobao.org cnpm -v 来测试是否成功安装 通过改变地址来使用淘宝镜像 npm的默认地址是https://registry.npmjs.org/ npm config get registry查看npm的仓库地址 npm config set registry https://registry.npm.taobao.org改变默认下载地址,这样不安装cnpm就能采用淘宝镜像 nrm nrm能够管理所用可用的镜像源地址以及当前所使用的镜像源地址,但是只是单纯的提供了几个url并能够让我们在这几个地址之间方便切换

前端 npm cnpm
阅读更多
Linux系统Centos7部署DotNet Core项目及环境安装
运维与DevOps
2019-09-06 0k

Linux系统Centos7部署DotNet Core项目及环境安装

1、环境安装及项目运行 安装 dotnet core #使用微软官方的源 sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm #更新软件源 sudo yum update #可以先搜索看一下列表 #yum search dotnet #安装 sudo yum install -y dotnet-sdk-3.1.x86_64 #查看是否安装成功 dotnet --version 下载项目 git clone https://github.com/raikay/firstdemo.git 生成项目 #进入生成目录 cd firstdemo/firstdemo #生成 dotnet publish -c release -o "publish" # -c 指定release; -o 指定生成目录 运行项目 dotnet firstdemo.dll --urls http://0.0.0.0:80 浏览器访问地址查看结果 http://192.168.198.131/WeatherForecast 至此已经成功运行! 2、supervisor创建守护进程 到上面的步骤程序运行没问题了,但是如果退出当前控制台,程序就会结束运行。 我们可以使用supervisor托管程序,创建守护进程,使程序持续运行。 安装supervisor yum install -y epel-release #安装扩展源 yum install -y supervisor 进入 supervisor控制台 supervisorctl 可以进入 supervisor 控制台,表示服务安装成功,并已成功启动

dotnet .NET Core Linux
阅读更多
正则表达式元字符简介
后端开发
2019-08-06 0k

正则表达式元字符简介

元字符1 .:匹配除\n之外的任何单个字符。 例如正则表达式“b.g”能匹配如下字符串:“big”、“bug”、“b g”,但是不匹配“buug”,“b..g”可以匹配“buug”。 [ ] :匹配括号中的任何一个字符(范围,字符集合)。 例如正则表达式“b[aui]g”匹配bug、big和bag,但是不匹配beg、baug。可以在括号中使用连字符“-”来指定字符的区间来简化表示,例如正则表达式[0-9]可以匹配任何数字字符,这样正则表达式“a[0-9]c”等价于“a[0123456789]c”就可以匹配“a0c”、“a1c”、“a2c”等字符串;还可以制定多个区间,例如“[A-Za-z]”可以匹配任何大小写字母,“[A-Za-z0-9]”可以匹配任何的大小写字母或者数字。思考:x[这里必须是元音]y,如何写正则?【当.出现在[]中,则表示普通.,不作为元字符。】 | :将两个匹配条件进行逻辑“或”运算。 例如‘z|food’ 能匹配 “z” 或 “food”。‘(z|f)ood’ 则匹配 “zood” 或 “food”。 //注意^$问题。 ():将 () 之间括起来的表达式定义为“组”(group) 将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。把一些字符表示为一个整体。改变优先级、定义提取组两个作用。 元字符2(限定符) 限定符:限定前面的正则表达式出现的次数。 *:匹配0至多个在它之前的子表达式,和通配符*没关系。等价于{0,}。 例如正则表达式“zo*”(等同于z(o)*)能匹配 “z” 、“zo”以及 “zoo”;因此“.*”意味着能够匹配任意字符串。“z(b|c)*“→zb、zbc、zcb、zccc、zbbbccc。“z(ab)*“能匹配z、zab、zabab(用括号改变优先级)。 +:匹配前面的子表达式一次或多次,等价于{1,} 例如正则表达式9+匹配9、99、999等。 “zo+”能匹配 “zo”以及 “zoo” ,不能匹配"z”。 **? :匹配前面的子表达式零次或一次。等价于:{0,1} ** 例如,“do(es)?” 可以匹配 “do” 或 “does” 。【colou?r、favou?r】一般用来匹配“可选部分”。(终止贪婪模式) {n} :匹配确定的 n 次。“zo{2}”→zoo。 例如,“e{2}” 不能匹配“bed”中的“e”,但是能匹配“seed”中的两个“e”。 //seeeed,不可以。 {n,} :至少匹配n次。 例如,“e{2,}”不能匹配“bed”中的“e”(只出现一次,至少两次),但能匹配 “seeeeeeeed”中的所有“e”。 {n,m} :最少匹配 n 次且最多匹配 m 次。 例如“e{1,3}”将匹配“seeeeeeeed”中的前三个“e”。 {2,5}//bed,seed,seeed;beeeeed错误。 元字符3 ^(shift+6) :匹配一行的开始。 例如正则表达式“^regex”能够匹配字符串“regex我会用”的开始,但是不能匹配“我会用regex”。^另外一种意思:非!([^0-9]) $ :匹配行结束符。

dotnet 正则 正则表达式
阅读更多
正则表达式在C#中的使用
后端开发
2019-08-06 0k

正则表达式在C#中的使用

正则表达式简介 正则表达式是对字符串的操作 正则表达式是一个用来描述字符串特征的表达式。 特征:必须出现的内容、可能出现的内容、不能出现的内容。 观察字符串规律,根据规律总结特征,然后根据特定字符串的特征来编写正则表达式。 常用函数: Regex.IsMatch(); //判断是否匹配 Regex.Match();//提取某个(一个)匹配 Regex.Matches();//提取所有的匹配 Regex.Replace();//替换 Regex.Split();//分割 Regex.IsMatch() 练习1:判断是否是合法的邮政编码(6位数字) lRegex.IsMatch("100830","^[0-9]{6}$") Regex.IsMatch("119", @"^\d{6}$"); 解释:由元字符定义得知“[0-9]”表示0到9的任意字符,“{6}”表示前面的字符匹配6次,因此“[0-9]{6}”中的{6}表示对数字匹配6次(000000123)。简写表达式得知“[0-9]”可以被“\d”代替,所以第二种写法“\d{6}”也是正确的。 练习2:判断一个字符串是不是身份证号码。 长度为15位或者18位的字符串,首位不能是0。 如果是15位,则全部是数字。 如果是18位,则前17位都是数字,末位可能是数字也可能是X。 写法一:^[1-9][0-9]{14}([0-9]{2}[0-9Xx])?$ 写法二: ^([1-9][0-9]{14}|[1-9][0-9]{16}[0-9X])$ 练习3:判断字符串是否为正确的国内电话号码,不考虑分机。 •010-8888888或010-88888880或010xxxxxxx •0335-8888888或0335-88888888(区号-电话号)03358888888 •10086、10010、95595、95599、95588(5位) •13888888888(11位都是数字) Regex.IsMatch(phoneNumber, @“^((\d{3,4}\-?\d{7,8})|(\d{5})|(\d{11}))$”); //或者 Regex.IsMatch(phoneNumber, @“^((\d{3,4}\-?\d{7,8})|(\d{5}))$”); 按照要求一个一个写,都用|连起来。注意:由于区号有时为010-xxxxxxx有时为010xxxxxxx,-可有可无,所以需要?,由于-表示一个区间,所以这里要转义-。最后不要忘记在所有|的最外层加一对() Regex.Match() / Matches() string msg = "大家好呀,hello,2010年10月10日是个好日子。恩,9494.吼吼!886."; Match match1 = Regex.Match(msg, @"\d", RegexOptions.ECMAScript); //提取得到 2 (逐个提取) Match match2 = Regex.Match(msg, @"\d+", RegexOptions.ECMAScript); //提取得到2010 //提取所有的匹配的字符串 MatchCollection matches = Regex.

dotnet 正则 C#
阅读更多
yum的基本使用以及替换国内源
运维与DevOps
2019-05-16 0k

yum的基本使用以及替换国内源

yum源管理 1.备份原有的yum源,以防出错时还可以还原 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载同时改名 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #其他源 wget http://mirrors.163.com/.help/CentOS7-Base-163.repo #centos7系统的 wget http://mirrors.163.com/.help/CentOS6-Base-163.repo #centos6系统的 wget http://mirrors.163.com/.help/CentOS5-Base-163.repo #centos5系统的 (注:如果下载出现错误,可能是变更了下载的地址,可以到:http://mirrors.163.com/.help/centos.html 找新的下载地址。没有安装wget的,要先安装。) 3.产生新的缓存。 yum clean all yum makecache 至此源更新完成,可以 yum -y update 测试一下更新的速度。 安装软件 以安装Docker为例 安装最新版 yum install -y docker-ce docker-ce-cli containerd.io 安装指定版本 列出可用版本 $ yum list docker-ce --showduplicates | sort -r docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable 安装指定版本 <VERSION_STRING>需要替换为第二列的版本号,如:18.06.0.ce-3.el7 $ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.

linux yum 包管理
阅读更多
Net Core 3.x 禁用序列化时自动首字母小写
后端开发
2019-03-11 0k

Net Core 3.x 禁用序列化时自动首字母小写

public void ConfigureServices(IServiceCollection services) { services.AddControllers().AddJsonOptions(config => { //去掉转小写功能 // System.Text.Json.JsonNamingPolicy.CamelCase:转小写 // null:不转小写 config.JsonSerializerOptions.PropertyNamingPolicy =null; }); }

dotnet .NET Core 序列化
阅读更多
NuGet源中国加速镜像,博客园,华为等
后端开发
2019-03-11 0k

NuGet源中国加速镜像,博客园,华为等

打开Visual Studio => 工具 => NuGet包管理器 => 程序包管理器设置 NuGet微软官方中国镜像地址: https://nuget.cdn.azure.cn/v3/index.json 官方默认源: https://api.nuget.org/v3/index.json 博客园: https://nuget.cnblogs.com/v3/index.json 华为: https://repo.huaweicloud.com/repository/nuget/v3/index.json MyNuGet: https://dotnet.myget.org/F/dotnet-core/api/v3/index.json 这是一个很激进的 NuGet 源,包含各种日构建包(其中包括 .NET Standard 或者 .NET Core 等库的日构建版本),所以如果你希望尝试最新的 API 最新的功能,最好设置此 NuGet 源。 早期版本: https://www.nuget.org/api/v2/ https://nuget.org/api/v2/

dotnet NuGet 包管理
阅读更多
T4模板 生成多个文件 映射整个库表
后端开发
2019-03-11 0k

T4模板 生成多个文件 映射整个库表

<#@ output extension="txt" #> <#@ template debug="false" hostspecific="true" language="C#" #> <#@ assembly name="System.Data" #> <#@ assembly name="System.xml" #> <#@ import namespace="System.Collections.Generic" #> <#@ import namespace="System.Data.SqlClient" #> <#@ import namespace="System.Data" #> <#@ assembly name="System.Core" #> <#@ import namespace="System.Linq" #> <#@ include file="MultiOutput.tt" #> <# string connectionString= "server=.;database=57blogDB;uid=sa;pwd=123;"; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); string selectQuery ="SET FMTONLY ON; select * from @tableName; SET FMTONLY OFF;"; SqlCommand command = new SqlCommand(selectQuery,conn); SqlDataAdapter ad = new SqlDataAdapter(command); System.

dotnet T4模板 代码生成
阅读更多
把C#程序(含多个Dll)合并成一个exe的超简单方法
后端开发
2019-03-11 0k

把C#程序(含多个Dll)合并成一个exe的超简单方法

开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了。 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具。那该怎么办呢? 下文介绍一种超简单的方法,不用写一行代码就可轻松实现。 这里我们需要用到一款名为Fody.Costura的工具。Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS工程中。安装之后,就可以将项目所依赖的DLL(甚至PDB)文件全部打包到EXE文件里。 使用方法 在VS中,通过Nuget为目标EXE工程安装Costura.Fody。 重新构建项目。 构建完成后,到项目的输出目录下找到新生成的EXE文件,你同时会发现输出目录下仍然存在那些DLL。不过不用担心,这个EXE已经能够独立运行了。你可以把这些DLL全部删除后再运行EXE试试。 另外,Fody.Costura还支持一些进阶的特性,例如: 临时程序集文件:在运行EXE前自动,自动将DLL从EXE中解压到文件夹系统中,再通过常规的方式加载该DLL。 合并非托管的DLL:Fody.Costura可以合并非托管的DLL,但是不会自动合。如果你的程序涉及非托管DLL,那么你需要通过修改Fody.Costura的配置文件来显示地告诉它你想合并哪些非托管的DLL。 预加载DLL:Fody.Costura可以帮助你在程序启动时预先加载某些DLL,你甚至可以指定这些DLL的加载顺序。 以上这些进阶特性都需要你通过修改Fody.Costura的配置文件来实现,具体的操作步骤可以参考它的官方文档。 好了,Fody.Costura的使用方式已经介绍完了。如果你对Fody.Costura的实现原理感到好奇,可以接着往下看。 实现原理介绍 当CLR试图加载一个程序集但加载失败时,它会引发AppDomain.AssemblyResolve事件。我们的程序可以监听这个事件,并且在这个事件的处理函数中返回这个CLR试图加载的程序集,从而使程序得以继续正常运行。 Fody.Costura在构建项目时会把EXE引用到的DLL全部嵌入到EXE文件中。当程序在运行的过程中用到其中某个DLL的时候(此时由于CLR无法找到该DLL文件,导致AppDomain.AssemblyResolve事件被触发)再从EXE文件的嵌入资源中提取所需的DLL。 下面这两个函数就是Fody.Costura实现这部分逻辑的代码。 public static void Attach() { var currentDomain = AppDomain.CurrentDomain; currentDomain.AssemblyResolve += (s, e) => ResolveAssembly(e.Name); } public static Assembly ResolveAssembly(string assemblyName) { if (nullCache.ContainsKey(assemblyName)) { return null; } var requestedAssemblyName = new AssemblyName(assemblyName); var assembly = Common.ReadExistingAssembly(requestedAssemblyName); if (assembly != null) { return assembly; } Common.Log("Loading assembly '{0}' into the AppDomain", requestedAssemblyName); assembly = Common.

dotnet C# Fody.Costura
阅读更多