跳到主要內容

發表文章

目前顯示的是有「ASP.Net Core」標籤的文章

Vue and ASP.NET Core 在 Visual Studio 2022 的新範本

 在2022年寫過一篇 Vue CLI move to Vite ,裡頭提到高手MakotoAtsu寫的範本,但後來沒有更新就很可惜。現在微軟終於在 Visual Studio 2022內建 Vue 範本,並且使用Vite與Web API,完全滿足我們程序猿的需求。

ASP.NET Web API 未認證時傳回 Code 404 而非 401

今天在開發簡單的 Web API 時發生一個奇妙的問題,原本應該傳回 401 Unauthorized 卻傳回  404 Not Found ,令我百思不得其解。

C# 將 HTML 碼轉為純文字

 最近某個系統要加上簽核意見,所以先使用  HtmlSanitizer 過濾惡意HTML tag。

SQL Server 使用者定義的資料表錯誤 User-Defined Table Type Error

最近有個新專案,由於資料表的欄位很多,還要Call Stored Procedure,所以請DBA將資料表做成User-Defined Table Type,沒想到我呼叫Stored Procedure更新時發生一個錯誤:    將 nvarchar 資料類型轉換成 datetime 資料類型時,產生超出範圍的值。 資料表值參數 "@MyUDT" 的資料不符合參數的資料表類型。SQL Server 錯誤為: 242,狀態: 3 陳述式已經結束。   使用User-Defined Table Type(以下簡稱UDT)做為參數非常簡單大概就是 SqlParameter parameter = new SqlParameter("@MyUDT", SqlDbType.Structured); parameter.Value = dataTable; 乍看之下會以為是資料內容錯誤,但這次我的內容人工出對後完全沒錯,欄位名稱也對。經過一天一夜的試誤,終於發現問題出在: 欄位順序 ! 以前我自己寫ADO.Net呼叫時,都會利用資料表先做出一個XML Schema(xsd),利用DataTable.ReadXmlSchema 產生結構,這樣Data Table裡的欄位順序絕對不會錯;而這次首度使用 List to DataTable 的公用程式自動產生DataTable,不用另外去產生XSD,整個程式變很順,不需要一個一個欄位塞值。 以上提供也使用UDT 做為SqlParameter的朋友參考。 後記:最近在測試時又發生過一次錯誤,是UDT屬性裡某個Not Null的欄位在DataTable裡缺值為null,也會造成呼叫UDT時錯誤。

ASP.Net 遇到 JSON 格式的日期會差8小時問題

最近開始試著學 ASP.Net Core ,用 .Net 5 寫WebAPI。用前端的 DatePicker 選日期會變成前一天,再追下去,居然是DateTime都會少8小時,這到底是怎麼一回事呢?可能是我之前都沒有用MVC的Model去解析JSON物件,所以沒有發生。 用 股溝 搜尋在 暗黑大的文章 有提到這問題,但我不太相信微軟會犯這種低級錯誤,所以再繼續追下去真正原因。 先假設 Model 裡有一個 public DateTime StartDate {get; set;} WebAPI接收到前端吐回的JSON Date 字串後,會解析成  StartDate.Kind 會是 DateTimeKind.Utc; 這沒錯,若是 DateTime now = DateTime.Now; now.Kind 是 DateTimeKind.Local 所以存到SQL Server時,變成UTC時區,而SQL Server讀取的時候,會依照儲存的時區把資料吐出來,再自己把DateTime.ToString("yyyy/MM/dd")時,就會變成前一天了@@。 目前我的解法是在儲存到SQL Server前, StartDate = StartDate.ToLocalTime();  若是在讀取時轉換應該也行啦,但我的情況和暗黑大一樣,使用者都在這小島內,不會跨時區,用最簡單的方式處理就好。就算有人跨時區使用, DateTime.ToLocalTime() 也不會有錯誤。 結案收工。