前言
下面雜亂的記錄了一些在實際開發(fā)中碰到一些浪費時間的“坑”,寫給前行者刚盈。
格式有些亂胎许,見諒找前。
1丈屹,HttpContext.Response.RegisterForDispose 事件
2调俘,IApplicationLifetime.ApplicationStopping.Register(OnShutdown,toDispose);
3,在 .net core 2.0 preview2 中旺垒,會自動讀取appsettings.json到IConfiguration中去
4彩库,在Library中,添加的資源文件設(shè)置如下:右鍵資源文件先蒋,選擇屬性骇钦,Build Action 中選擇Embedded Resource即可。 然后使用Assembly.GetManifestResourceNames 和 GetManifestResourceStream 即可讀取
5竞漾,小心==重載造成的死循環(huán)
6眯搭,Linq中的Select引用Trick窥翩,Select出來的依然是引用
List list = new List();
list.Add(new Entity() { Name = "One" });
IEnumerable list2 = list.Select(t => t.Name);
Console.WriteLine(list2.ElementAt(0));
list.ElementAt(0).Name = "Two";
Console.WriteLine(list2.ElementAt(0));
結(jié)果:第一行One,第二行Two鳞仙。 select出的值依然是引用類型
在第三行l(wèi)ist.Select(t => t.Name)后加上.ToArray()寇蚊,可以避免這個情況 發(fā)生。
7繁扎,在MySql.Data 7.0.7-m61中幔荒,DbDataReader.Close()與DbDataReader.Dispose()不能真正關(guān)閉reader糊闽;IDataReader.Close()不起作用梳玫,但IDataReader.Dispose()起作用。解決辦法右犹,將其轉(zhuǎn)換為MySqlDataReader提澎,然后close。
//最新念链,在8.0.8-dmr版本中盼忌,會起作用。
8掂墓, 鼓勵直接引用谦纱,比如ProjectA,使用到ProjectB與ProjectC君编,而ProjectB使用到ProjectC跨嘉,那么在vs里,ProjectA直接引用ProjectB即可吃嘿。但是鼓勵也添加直接引用ProjectC祠乃。 事實上,在vs for mac中兑燥,不直接引用會導(dǎo)致intelligence失靈亮瓷。2017-7-1
9, Visual studio 2017 Preview 2. 新建web項目降瞳,nuget bad request 400 錯誤嘱支。改語言為English。解決挣饥。 2017-6-19
10斗塘,asp.net core Authentication模塊重構(gòu)。原來Http.Feature和Http.Abstractions中的Authentication文件夾中的代碼全部棄之不用亮靴。 轉(zhuǎn)而集中到 Authentication.Abstractions中馍盟。完成了Http 與 Authentication的解耦。 2017-6-21
11茧吊,在json配置文件中贞岭,若屬性為數(shù)字型八毯,不可為空(""),會引發(fā)異常導(dǎo)致讀不了瞄桨,
12话速,使用serviceCollection.Configure, 一定要 serviceCollection.AddOptions()
13, 構(gòu)造函數(shù)中使用到httpcontext芯侥,session等泊交,一定要AddScope,而不是AddSigleton
14柱查,有時候莫名其妙的話廓俭,特別是reference出問題的話,重啟visual studio 2017. ?2017-7-1
15唉工,visual studio 2017 preview 4 總是需要rebuild研乒,否則引用類庫里的修改,不會體現(xiàn)
16淋硝,JwtBearerEvents 中的OnAuthenticationFailed 設(shè)置 StatusCode得到Kestrell拋出StatusCode?cannot?be?set?because?the?response?has?already?started 異常雹熬。這也是因為 [Authority] 屬性會調(diào)用Challenge,那里會設(shè)置statuscode谣膳,和 error head竿报。 所以從返回的header中讀取錯誤信息即可。OnAuthenticationFailed應(yīng)該永遠不使用继谚。
17烈菌, IIS 配置時,權(quán)限要加上IIS_IUSRS Modify權(quán)限犬庇。
18僧界, IIS外網(wǎng)無法訪問時,檢查如下:
1臭挽,訪問權(quán)限捂襟。
2,防火墻欢峰,或者云計算機的控制臺里的防火墻
3葬荷,netsh http show iplisten 查看是否有監(jiān)聽 ip地址,沒有的話纽帖,使用netsh http add iplisten ipaddress=111.xxxx 來添加監(jiān)聽宠漩,這樣請求才能到達iis
19,關(guān)于DataProtection的問題懊直。部署在單機IIS上扒吁,可以按照文檔進行即可。但如果要在多個IIS之間共享DataProtection(實際場景)室囊,則要如下雕崩。首先建立共享文件夾魁索,用于存放DataProtection加密后的文件。然后盼铁,要指定key粗蔚,如果不指定,則每次更換饶火。key用Certification來指定鹏控。最后,指定ApplicationDataProtectionDiscriminator為同一個肤寝。代碼如下:
services.AddDataProtection()
? ? .SetApplicationName("xxxx.yyyyy.zzz")
? ? .PersistKeysToFileSystem(new?DirectoryInfo(@"\\server\share")
? ? .ProtectKeysWithCertificate("cert_thumbprint");
這三個配置將邏輯当辐、物理位置、key三者設(shè)置相同醒陆,即可在IIS之間共享cookie等等加密后需要解密的瀑构。
ProtectKeysWithCertificate本機沒問題裆针,服務(wù)器上一直報錯刨摩。解決辦法,將證書存儲在Root下世吨,然后右鍵復(fù)制澡刹,再到MY下,粘貼耘婚。這樣可能是能解決某個權(quán)限問題罢浇。
歡迎來訪本人的github上項目:https://github.com/yzbai/HB.Framework,一個輔助最新asp.net core 2 的框架類庫沐祷。