這周沒有什麼太專題的東西,就流水賬記一下。最近開始入手轉型Asp.net MVC,雖然已經落後時代幾條街,但是還是趕趕追追。有一些太細的點記在我的筆記里,就不記到這裡了,每次發博客園都是第二遍編寫,希望能增加記憶。 2019.02.19以前都是在C#程式中直接生成MD5,這一次由於邏輯需要,要在SQ ...
這周沒有什麼太專題的東西,就流水賬記一下。最近開始入手轉型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);