2019周笔记(2.18-2.23)
这周没有什么太专题的东西,就流水账记一下。最近开始入手转型asp.net mvc,虽然已经落后时代几条街,但是还是赶赶追追。有一些太细的点记在我的笔记里,就不记到这里了,每次发博客园都是第二遍编写,希望能增加记忆。
2019.02.19
以前都是在c#程序中直接生成md5,这一次由于逻辑需要,要在sql 直接生成md5,学习了一个语句:
select substring(sys.fn_sqlvarbasetostr(hashbytes('md5','123456')),3,32)
然后进行了发散得到以下知识:
1、--hashbytes ('加密方式', '待加密的值')--(有个疑问,为什么他的返回类型是二进制,最终select出来的确实0x开头的16进制???)
--加密方式= md2 | md4 | md5 | sha | sha1
--返回值类型:varbinary(maximum 8000 bytes)
select hashbytes('md5','123456')
--hashbytes生成的结果为:0xe10adc3949ba59abbe56e057f20f883e
其中,'待加密的值'要非常小心,赋的值相同,如果类型不同,得到的md5相差甚远。例如:varchar(10),nvarchar(10),因为他们的实际存储大小不一样。
2、sys.fn_sqlvarbasetostr用于把字节流类型varbinary,转化成字符流varchar
3、substring('原始字符串','开始位置','截取长度')字符串截取。有一点需要注意的是,sql跟c#程序不同的是,开始位置是从1开始的,不是0,别算错了
2019.02.20
通过mvc的一个[validateantiforgerytoken]特性学习到了“跨网站请求伪造”(csrf(cross-site request forgery))这个概念,意思就是第三方站点利用漏洞站点对浏览器cookie的信任,发送虚假请求,从而做出一些未经用户许可的操作,前提是用户未退出信任站点的会话,并且信任站点在本地产生了cookie。之前确实没怎么注意这个细节,只是现在开发的webapi项目中根本没有用到cookie,连session也没用,所以应该是安全的。
2019.02.21
集合类型的几种选择思路:
1.如果你返回的集合是只用于遍历,不可修改的,则返回ienumerable<t>
2.如果返回的集合需要修改,如添加和删除元素,用icollection<t>
3.如果返回的集合需要支持排序,索引等,用ilist<t>
4.如果返回的集合要支持索引,但不能添加,删除元素,用readonlycollection<t>
2019.02.22
1、泛型:func<t, bool>,expression<func<t, bool>>用法
func<t, bool>:.net系统自定义了两种委托,有返回值的func,无返回值的action。而func的最后一个参数总是委托的返回类型。
expression<func<t, bool>>:是一种表达式,ef中where要求的类型
例如:
//正确的代码 expression<func<questionfeed, bool>> predicate=null; if (type == 1) { predicate = f => f.feedid == id && f.isactive == true; } else { predicate = f => f.feedid == id; } _questionfeedrepository.entities.where(predicate);