.NET
北方的木
看了不是你的,看懂了才是你的!
展开
-
modules的用法(场景)
modules在一个应用程序内配置 HTTP 模块。type有2个参数,前面是命名空间,后面是dll名称注意点,新建的项目是类库,类要继承IHttpModule接口Application_BeginRequest这个是发送请求的使用场景,当一个网站进入登入页面时先要校验是否进行企业微信扫码,就引用modules,将类库生成的dll放到网站的bin目录中,在Application_BeginRequest中监视是否存入对应的cookie,没有就是没有扫码调转到扫码页面,有就是已扫码可以进登入页面原创 2021-06-23 14:37:16 · 335 阅读 · 0 评论 -
企业微信扫码授权功能(笔记)
id//容器idappid//企业管理后台的企业idagentid//自建引用的应用idredirect_uri//扫码通过后跳转的地址(需要在自建应用的接口回调中配置域名在端口)state//用于标识可以当他是一个url参数原创 2021-06-23 14:28:28 · 659 阅读 · 0 评论 -
对称加密解密_AES
非对称加密使用一对秘钥,一个用来加密,一个用来解密,这样加密和解密花费时间就会更长长。对称加密中加密方和解密方使用同一个密钥,加密解密的速度比较快,耗时短,适合数据比较长时的使用。 public class AESHelper { /// <summary> /// 有密码的AES加密 /// </summary> /// <param name="toEncrypt">加密字符</pa原创 2021-06-23 14:22:57 · 455 阅读 · 0 评论 -
Cookies用法
HttpApplication app = sender as HttpApplication; HttpContext context = app.Context; var curRequest = app.Request; var cookies = app.Request.Cookies; //新增 HttpCookie cookie = new HttpCookie("wxtoken"); cookie.Value = wxtoken; cookie.Expires = Dat...原创 2021-06-23 14:21:34 · 111 阅读 · 0 评论 -
.net获取iis全部站点和对应端口
/// <summary> /// 扫码通过后跳转到目录浏览界面 /// </summary> protected void JumpDirectory() { //获取iis全部的网站名称和对应的url地址 List<IIsWeb> webs = new List<IIsWeb>(); DirectoryEntry ...原创 2021-06-21 17:48:40 · 929 阅读 · 0 评论 -
.net后台重定向
HttpContext context = app.Context; context.Response.Redirect("http://localhost:8089/");原创 2021-06-21 17:12:52 · 463 阅读 · 0 评论 -
C# Default使用
使用场景泛型方法的时候 public static T test<T>() { //因为不知道T的类型就用default,如果T是string,default(T)就是"",如果是int,default(T)就是0 return default(T); }原创 2021-05-25 17:55:05 · 496 阅读 · 0 评论 -
FreeSql学习_Codefirst_手动和自动
FreeSql提供两种CodeFirst移迁方法,自动和手动。手动找到实体类当【实体类】对应的是数据库【视图】或者其他时,可通过 [Table(DisableSyncStructure = true)] 禁用指定的实体迁移操作。这个DisableSyncStructure 要改为false,然后添加个测试字段testId1代码执行这个就可以了fsql.CodeFirst.SyncStructure<Test2>();结果自动fsql.CodeFirst.IsAutoSy原创 2021-04-22 10:13:07 · 1713 阅读 · 0 评论 -
FreeSql学习_Dbfirst_增删改查
1.先建一个Model文件夹存放实体2.model的目录使用cmd–安装命令dotnet tool install -g FreeSql.Generator安装的时候要等下不要急,-g表示全局,给电脑装安装后使用dbfirst无效可以卸载了在装–卸载命令dotnet tool uninstall -g FreeSql.Generator3.执行dbfirst命令重点:在Data Source=.前有个SqlServer,,这个是sqlserver连接的格式,不同数据库的连接方式不一样F原创 2021-04-21 18:18:19 · 2139 阅读 · 0 评论 -
FreeSql学习_安装了解
FreeSql个人理解他的优势主要语法更全,更简洁,支持数据库更多1.安装nuget包的安装,FreeSql.DbContext是必须要的,然后是数据库连接,此处用的是SqlServer,所以安装了FreeSql.Provider.SqlServer。2.安装后写连接字符串类 public class DB { public static Lazy<IFreeSql> mysqlLazy = new Lazy<IFreeSql>(() =>原创 2021-04-21 18:06:27 · 973 阅读 · 0 评论 -
定时任务demo
原理new一个定时任务对象,然后调用开始的方法,隔断时间调用一次 public class Global : System.Web.HttpApplication { public Global() { Application_Start(); } //在网站运行时这段代码同时启动 protected void Application_Start() {原创 2021-04-21 15:17:26 · 166 阅读 · 0 评论 -
.net引用其他语言的dll
(未实践)这直接引用会报错,需要先注册怎么注册win+r输入命令regsvr32 C:\RisInterface.dll【dll路径】用cmd也是同样的原创 2021-04-21 14:38:26 · 232 阅读 · 0 评论 -
解决Distinct()无效
旧list.Distinct().ToList();新list.GroupBy(n => n.detail_guid).Select(n => n.First()).ToList();原创 2021-04-16 10:08:50 · 1825 阅读 · 0 评论 -
echarts的关系图的demo
效果图如下demo代码<!DOCTYPE html><html><head> <meta charset="utf-8" /> <script type="text/javascript" src="/jquery/echarts.js"></script></head><body> <form id="form1" runat="server">原创 2021-04-15 15:25:20 · 1212 阅读 · 0 评论 -
string.Concat连接字符串
原创 2021-03-31 17:20:39 · 112 阅读 · 0 评论 -
Merge的用法,主要是合并,table和DataTable都是可以的
例子用DataTable,相同字段的合同,直接就是新增一行不同字段也是新增行,但是合并后,有些字段为空先合并相同字段在合并不同字段 //测试数据1 DataTable dt = new DataTable(); dt.Columns.Add("id"); dt.Columns.Add("name"); DataRow row = dt.NewRow(); row["id"]原创 2021-03-31 15:57:45 · 569 阅读 · 0 评论 -
.NET封装类库成DLL带注释,使用并反编译查看效果
第一步,建个类库注意了是.NET Framework的类库第二步,写几个封装类分为非静态类和静态类,这2个使用的方式不一样非静态类静态类第三步,给项目设置生成xml,这个是为了反编译的时候你的dll有注释第四步,使用把dll,和xml都拷贝过去(dll和xml要在同一个目录),并添加引用,使用时,静态类不需要new第五步,反编译查看效果,直接将dll拖到ILSpy工具就好了...原创 2021-03-26 15:58:02 · 574 阅读 · 0 评论 -
.NET之数据库项目_架构比较
1.新建项目2.同数据库数据信息同步2.1可以用导入和发布实现同步2.0我用的是架构比较选中数据库,中间有个互换的按钮,将左边不同的结构同步到右边需要什么勾选什么原创 2021-03-26 10:32:56 · 155 阅读 · 0 评论 -
aspx初始化时怎么获取url参数
protected void Page_Load(object sender, EventArgs e) { var oid = getQueryString("oid"); } protected string getQueryString(string name) { //1.获取站点名+页面名+参数 string url = Request.Url.PathAndQuery; //2.把"%uxxx...原创 2021-03-10 17:34:09 · 516 阅读 · 0 评论 -
Quartz作业调度实践
Quartz的使用场景:例如:每5秒对某个平台传输数据Quartz框架的一些基础概念解释:Scheduler 作业调度器。IJob 作业接口,继承并实现Execute, 编写执行的具体作业逻辑。JobBuilder 根据设置,生成一个详细作业信息(JobDetail)。TriggerBuilder 根据规则,生产对应的Trigger这里有个注意点Quartz包的版本必须要2.6.2,因为后面的版本以后也就是3开头的StdSchedulerFactory.GetDefaultScheduler(原创 2021-01-26 18:03:56 · 1009 阅读 · 0 评论 -
方法多个返回值怎么返回(元组)
用值元组返回ValueTuple是C# 7.0的新特性之一,.Net Framework 4.7以上版本可用。其实C#还有Tuple元组 ,但是有ValueTuple就没有必要用Tuple元组 了值元组也是一种数据结构,用于表示特定数量和元素序列,但是是和元组类不一样的,主要区别如下:值元组是结构,是值类型,不是类,而元组(Tuple)是类,引用类型;值元组元素是可变的,不是只读的,也就是说可以改变值元组中的元素值;值元组的数据成员是字段不是属性。特性:当构造出超过7个元素以上的值元组后,可以原创 2021-01-26 15:48:18 · 1694 阅读 · 0 评论 -
AutoMapper9.0多个字段映射规则的使用
测试类public class User{ public string Name { get; set; } public int Age { get; set; }} public class UserDto : User{ public string sex { get; set; }}一般注入写在配置文件 //直接映射,无需处理映射规则的 var config = new MapperConfiguration(cfg =原创 2021-01-26 11:46:51 · 825 阅读 · 0 评论 -
String.Join()方法
join需要2个参数,一个是分隔符,一个list数组;var voucherGuid = string.Join(",", vouchers.Select(i => i.VouchGUID).Distinct());执行后voucherGuid =‘1524ef61-4dbd-4a94-41d0-08d8075a7db4,3cf2f999-8809-41f3-f581-08d80885e63c’String.Join()的源代码,大佬可以研究下/// <summary>Concat原创 2021-01-22 09:36:59 · 863 阅读 · 0 评论 -
Any和All的用法
any和all是c#提供的集合扩展方法,使用返回bool的表达式作为参数。any表示集合中的任一个元素满足表达式条件,即返回true。all表示集合中的所有元素满足表达式条件,即返回true。以下这是等同的var all = listsk.All(o => o.JsonData.Contains("test"));var exists= listsk.Exists(o => o.JsonData.Contains("test"));if (listsk.Count() == 0)原创 2021-01-19 15:39:04 · 1686 阅读 · 0 评论 -
log4进阶使用带有LogHelper
这个进阶比较简单1.添加log4net引用,nuget安装就好2.添加帮助类,然后调用测试代码如下 var str = "INSERT INTO 表名称 VALUES (值1, 值2,....)"; LogType logType = LogType.Insert; LogHelper.WriteLogAsync(str, logType); str = "UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值"; logType = LogType.Update;原创 2021-01-06 19:28:33 · 542 阅读 · 1 评论 -
log4的基础使用
第一步给应用程序的NuGet包管理中添加log4net第二步修改app.config在configuration标签下添加如下内容,其中这个logs文件夹不需要新建 <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> </configSections> <appSettings> </appSet原创 2021-01-06 19:13:27 · 1136 阅读 · 0 评论 -
实名认证的接口调用
首先是购买校验接口_身份证二要素API接口地址如下:想玩的可以试下有10次免费的机会(错误的实名也算一次)阿里云实名认证查询校验接口_身份证二要素API接口重点:具体根据你的语言复制对应的代码,请求中有个appcode参数是需要你购买后才能得到了...原创 2021-01-06 10:06:44 · 2069 阅读 · 0 评论 -
C#如何给Object添加新的属性值
以下是测试代码 var DesignAlterGuid = "1"; var ydgcxtSubContractGuid = "2"; var AlterCode = "3"; //new object 中默认有个语法糖规则就是,如果没有定义属性名,属性值的名称就是属性名 var obj = new { DesignAlterGuid, ydgcxtSubContractGuid, AlterCode };原创 2021-01-05 17:26:57 · 6318 阅读 · 0 评论 -
C#之类型.TryParse(参数A, out 类型 xx)的用法
TryParse这个函数返回类型为bool类型,用以判断作为参数A[参数A必须为字符串]是否可以转换为前面的类型。如果可以转换,那么则将转化结果以out类型参数的方式返回。例子如下:如果oldGuid是guid类型就映射给newGuid,否则就报错var oldGuid = new Guid();if (Guid.TryParse(oldGuid.ToString(), out Guid newGuid) == false){ throw new BusinessLogicExceptio原创 2021-01-05 16:11:01 · 4429 阅读 · 1 评论 -
DataTable转List
测试数据如下DataTable dt = new DataTable();DataColumn dc1 = new DataColumn("Product", Type.GetType("System.String"));DataColumn dc2 = new DataColumn("Version", Type.GetType("System.String"));DataColumn dc3 = new DataColumn("Description", Type.GetType("System原创 2021-01-04 17:13:12 · 2325 阅读 · 0 评论 -
抽象实体怎么New,用EntityFactory
testGysDto是个抽象类var test =new testGysDto();//是无法直接new出来var test= EntityFactory.New();//只能用EntityFactory来new原创 2020-12-30 14:25:34 · 516 阅读 · 1 评论 -
Math.Round导致合计不准确怎么解决
思路:1.循环对数据进行Math.Round计算,并保存合计值2.将新合计值和旧值进行对比,如果不同,将差补差进去//totalAmount计算金额//Details需要计算的list集合//定义新的合计用于统计计算后的合计decimal newSumAmount = 0;//循环需要计算的数据foreach (var item in Details){ item.FtAmount = Math.Round(totalAmount *'对应比例' ,2); newSumAmount原创 2020-12-25 13:09:31 · 1205 阅读 · 0 评论 -
请求接口时,返回值有不明字符串“d”,或者封装后的对象
场景:请求接口值,出现不明字符串“d”解决方案:将接口的返回值设置为void,通过流的形式返回 /// <summary> /// 测试请求接口 /// </summary> /// <param name="test"></param> public void TestInterface(string test) { if (test == st原创 2020-12-23 13:35:40 · 336 阅读 · 0 评论 -
Base64加解密代码
测试代码 static void Main(string[] args) { //加密前 var str = "wyf1999"; var encryptUtility = new EncryptUtility(); Console.WriteLine("加密前"+str); var afterstr = encryptUtility.EncodeBase64(str.原创 2020-12-15 10:34:06 · 900 阅读 · 2 评论 -
后台获取本地的ip地址
代码Console.WriteLine(Dns.GetHostEntry(Dns.GetHostName()).AddressList[3]);以下是个官方对dns的描述https://docs.microsoft.com/zh-cn/dotnet/api/system.net.dns?view=net-5.0原创 2020-12-15 09:02:33 · 653 阅读 · 0 评论 -
C#基础string转int的公用方法
public static int AsInt( string str, int defaultVal = 0){ int d; return int.TryParse(str, out d) ? d : defaultVal;}原创 2020-12-09 15:23:08 · 240 阅读 · 0 评论 -
C#2个list对象拼接
var list1 = new List();var list2 = new List();list1.AddRange(list2);原创 2020-08-26 10:29:17 · 5255 阅读 · 0 评论 -
VS如何清缓存
拉代码后可能出现某些dll或者引用下面有红色波浪线,可能是vs缓存,将解决方案配置成Release生成下,在切换回去就可以了。或者是引用缓存,就是引用下的dll的右下角有黄色的小方块,就右击选择下属性就好了。...原创 2020-08-14 15:26:11 · 6342 阅读 · 1 评论 -
多线程学习五、线程同步锁机制实例
为什么要用锁,防止多个线程对一个共享资源进行访问出现的异常using System;using System.Threading;namespace ThreadDemo3{ class Program { static int i = 1; static void Main(string[] args) { Program program = new Program(); //for原创 2020-08-11 09:39:27 · 116 阅读 · 0 评论 -
多线程学习四、线程池概念初步理解代码
线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。using System;using System.Diagnostics;using System.Threading;namespace原创 2020-08-10 18:19:25 · 197 阅读 · 0 评论