最近心血來潮逛看看最近有哪些 web hosting 的時候發現 Godaddy 竟然支援 .Net Core 了 !!
於是乎抱著滿心期待的拿了魔法小卡刷了一個月來試玩看看,刷完才發現竟然只支援 .Net Core 2.0 …
ASP.NET
[C#][Line] 使用 Line Notify 開發訊息通知機器人 – 開發篇
上一篇文章:[C#][Line] 使用 Line Notify 開發訊息通知機器人 – 註冊篇
我使用了自己的開源套件 LexLibrary.Line.NotifyBot,直接從 NuGet 就可以下載安裝,節省了許多串接 API 時所需的開發與測試時間,只需安裝套件後即可快速開發 Line Notify Bot!!
[.NET Core] EFCore Generate DbModel
使用 EFCore 的時候沒有看有地方可以像 .NET Framework 可以直接使用 VS 新增 edmx 產生好資料庫的 Model 與 DbContext,這個時候就必須靠自己拉,不過當 Table 多的時候這樣人工慢慢新增 Model 有點智障,於是乎就上網找到了 EFCore Tool 有提供一段命令可以使用。
網址:https://docs.microsoft.com/zh-tw/ef/core/miscellaneous/cli/powershell
這裡就來簡單做個筆記
- 首先在
Package Manager Console
輸入指令安裝 EFCore Tool
1 |
Install-Package Microsoft.EntityFrameworkCore.Tools |
-
若為 Win7 需要先裝
Windows Management Framework 3.0
否則會跟我一樣出現下面的錯誤
-
檔案可以在 這裡 找到下載安裝並重開機。
-
產生 Model 前需注意一件事情就是密碼不能有
$
符號,不然會跟我一樣鬼打牆一小時都找不到問題,我有嘗試使用單引號包起來,但依然無法成功連線 -
接著在
Package Manager Console
輸入指令 (適用於 Azure SQL DataBase)
1 |
Scaffold-DbContext "Server={ip};Initial Catalog={dbName};Persist Security Info=False;User ID={Account};Password={Password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir {Path} |
- 接著就可以看到 VS 裡面跑出 DbModel 與 DbContext 囉 !!
[SideProject] Gif 產生器
動機
原作者是 ruby 寫的 sorry
感覺頗有趣的就寫個 .NET 版來玩玩了
由於很懶所以沒有優化歡迎PR
專案說明
本專案是用 Visual Studio 2017 開發
基本上只要裝了微軟爸爸的 VS 後直接 F5 就可以執行了
若有問題歡迎發 Issues
連結
GitHub:https://github.com/shuangrain/SorryNet
Blog:https://blog.exfast.me/2018/03/side-project-gif-generator/
[C#][ASP.NET WebAPI] 回傳 JSON 時忽略 null 欄位
當回傳JSON格式時通常都會直接傳送model,但又不是每個欄位都有用到就有會空值的欄位出現,這時想要將null的欄位隱藏就可以用這招啦。
在WebApiConfig.cs中的Register方法加入以下程式碼:
1 2 3 4 5 |
//回傳時忽略null欄位 config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; |
[C#][ASP.NET MVC5] 用 Global.asax 的 Application_Error 來記錄 Exception
當網站出錯時有問題卻沒有紀錄怎麼辦?用Application_Error
來Hold住全場吧 !!
- Global.asax
1234567891011121314protected void Application_Error(object sender, EventArgs e){var rawUrl = Request.RawUrl;var ex = Server.GetLastError();Debug.WriteLine("RawUrl: {0}", rawUrl);Debug.WriteLine("Ex: {0}", ex.Message);Debug.WriteLine("StackTrace: {0}", ex.StackTrace);//若網頁沒有撰寫任何的錯誤處理,或是沒有回收清除(Server.ClearError),最後將顯示預設錯誤畫面;反之若有清除則不再往下一個除錯流程。Server.ClearError();//導回首頁Response.Redirect("/");}
[C#][ASP.NET MVC5][Autofac] DI Framework – AutofacConfig.cs
之前嘗試很多次都失敗,這次終於成功註冊Controller、Service與Repository了,來記錄一下設定檔。
- AutofacConfig.cs
123456789101112131415161718192021222324252627282930313233343536/// <summary>/// DI設定檔/// </summary>public class AutofacConfig{/// <summary>/// 註冊DI注入物件資料/// </summary>public static void Register(){// 容器建立者ContainerBuilder builder = new ContainerBuilder();// 註冊Controllersbuilder.RegisterControllers(Assembly.GetExecutingAssembly());// 註冊Servicebuilder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Where(t => t.Name.EndsWith("Service")).AsSelf();// 註冊Repositorybuilder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Where(t => t.Name.EndsWith("Repository")).AsSelf();// 建立容器IContainer container = builder.Build();// 解析容器內的型別AutofacDependencyResolver resolver = new AutofacDependencyResolver(container);// 建立相依解析器DependencyResolver.SetResolver(resolver);}} - Global.asax
12345protected void Application_Start(){//加入這行AutofacConfig.Register();}
[C#][ASP.NET MVC5] 繼承 ValidationAttribute 簡單實作表單欄位驗證
有用過MVC的人一定都知道只要在Model上面加標籤[Required]
,即可達到前後端驗證欄位必填的效果,無聊研究了一下來簡單實作自定義的表單欄位驗證 !!
- 首先建立一個類別,繼承
ValidationAttribute
,宣告m_BaseText
變數來儲存預設禁止的文字,而m_Text
則是用來儲存禁止其他文字用的變數。
12345public class ExampleAttribute : ValidationAttribute{private string[] m_Text;private string[] m_BaseText = new string[] { @"\", @"/", @"<", @">" };} - 接下來利用多載宣告兩個建構子,一個是不帶參數的,另一則是型別為
string[]
的Text
變數,並放到剛剛宣告的m_Text
裡面。
123456789public ExampleAttribute(){m_Text = new string[] { };}public ExampleAttribute(string[] Text){this.m_Text = Text;} - 接下來把
IsValid
方法override
掉,並實作驗證機制。
12345678910111213141516171819protected override ValidationResult IsValid(object value, ValidationContext validationContext){string strValue = (string)value;string[] strBaseError = m_BaseText.Where(x => strValue.Contains(x)).ToArray();string[] strCustomError = m_Text.Where(x => strValue.Contains(x)).ToArray();if (strBaseError.Count() == 0 && strCustomError.Count() == 0){return ValidationResult.Success;}else{List<string> temp = new List<string>();temp.AddRange(m_BaseText.ToList());temp.AddRange(m_Text.ToList());string errorMsg = $"禁止輸入 [{string.Join(", ", temp.ToArray())}] !!";return new ValidationResult(errorMsg);}} - 完成 !!
原始碼:https://github.com/shuangrain/WebApplication_CustomAttribute
[C#][ASP.NET WebAPI] 如何讓 WebAPI 支援 Session ?
WebAPI原本無法使用HttpContext.Current.Session["aaa"]
這樣的方法來使用Session,幸好有找到解決方法可以用。
在檔案:~/Global.asax
,內新增以下程式碼即可支援
1 2 3 4 |
protected void Application_PostAuthorizeRequest() { System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required); } |
參考:
[C#][ASP.NET WebAPI] 修改預設回傳格式為Json
最近在玩ASP.NET Web API,他不但支援Json也支援Xml,但預設回傳的格式是Xml怎麼辦?
檔案位置:~/App_Start/WebApiConfig.cs
1 2 3 |
//預設回傳Json MediaTypeHeaderValue appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml"); config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); |
參考: