顯示具有 ASP.NET Core MVC 標籤的文章。 顯示所有文章
顯示具有 ASP.NET Core MVC 標籤的文章。 顯示所有文章

2024/06/18

[C#][WebAPI] Json.NET / System.Text.Json 序列化物件中忽略 null 值的屬性

markdown 近期遊走在 ASP.NET MVC 5 / Web API 2 以及 ASP.NET Core MVC (.NET) 的專案中 對於由 API 讀取進來的物件在 .NET Framework 與 .NET 下處理的方式不同, 需要記錄一下以便日後翻查

場景需求

使用場景是把接收進來的物件內容轉換做一個清洗,只要從 Web API 接進來的物件屬性值為 null 的都不保留 例如: 有一個 Log 物件如下 ```C# var log = new Log { Timestamp = "2024-06-16T09:22:01.5120098Z", Level = "Information", Message = "This is test message", Exception = null }; ``` 那麼經過清洗過後的字串內容就不會包含 Exception 空值的屬性 ```Json { "Timestamp":"2024-06-16T09:22:01.5120098Z", "Level":"Information", "Message":"This is test message" } ``` 以下即是在 ASP.NET MVC 5 及 ASP.NET Core 不同環境的處理方式

2023/02/20

[.NET] 升級 ASP.NET MVC 至 ASP.NET Core MVC 的注意事項

markdown ### 前言 繼上篇 [如何使用 .NET Upgrade Assistant 升級舊 ASP.NET MVC 專案](https://devmanna.blogspot.com/2023/02/howto-upgrade-using-net-upgrade-assistant.html) 所遇到的升級問題再做一個小小的注意事項筆記 ### 網站檔案路徑 在 ASP.NET MVC 可以透過 `Server.MapPath()` 來指定在伺服器上的路徑 例如: ```cs public class HomeController : Controller { public ActionResult Index() { string docsPath = Server.MapPath("~/docs"); //... } } ``` 而在 ASP.NET Core MVC 需要經由注入 Microsoft.AspNetCore.Hosting.IWebHostEnvironment 來讀取環境變數 例如: ```cs public class MyService { public MyService(IWebHostEnvironment env) { string docsPath = $@"{env.CotnentRootPath}/docs"; } } ```

2023/02/19

[.NET] 如何使用 .NET Upgrade Assistant 升級舊 ASP.NET MVC 專案

markdown ### 問題 進入 .NET 7 的今日,手邊仍有許多舊的專案,要如何將舊專案升級呢? 微軟提供了 .NET Upgrade Assistant 工具來協助升級舊專案。 讓我們一起來一步步升級吧! ### 升級專案 舊專案環境: - ASP.NET MVC 5.2.9 - .NET Framework 4.7.2 想要升級目標專案至 .NET 7

2022/10/20

[.NET6] ASP.NET Core MVC 如何設定 routing 小寫英數字串的 URL

markdown #### 前言 在 ASP.NET MVC 或是 ASP.NET Core MVC 預設的 Route 會自動指定 Controller 及 Action 名稱的路徑,因為我們都是用大寫英文,而自動生成的路徑也都是以大寫顯示,雖然在路徑上直接打小寫的也是可以連到指定的路徑,但是在網站生成的連結都是大寫來顯示。 原本在 ASP.NET MVC 我要特定指定小寫的做法會是在 RouteConfig 設定 `routes.MapMvcAttributeRoutes()` 並且在 Controller 指定 RoutePrefix 及 Route 屬性。 然而今天在查詢資料時才發現原來有更簡單的方法,而且很久很久以前就支援了。 雖然手邊目前執行的專案是 ASP.NET MVC,筆記就一併記錄目前最新的版本 ASP.NET Core MVC (.NET6)。 #### ASP.NET MVC 修改 `App_Start/RouteConfig.cs` 在所有的 routes 設定之前加上 ```cs routes.LowercaseUrls = true; ``` 居然這麼簡單就設定完成了,完全不用再打開 Controller 一一指定。這個方法適用於不需特殊指定名稱,僅是把預設路徑皆改變為小寫。 ### 方法二:指定 Route attribute 這個明確的指定方法是可以更客製化,哪天路徑名稱想改是可以把名稱任意改變的,例如加上 v1 或 v2 ```cs routes.MapMvcAttributeRoutes() ``` 以 HomeController 為範例,直接指定小寫的字串 (/Home/Privacy 變成 /home/privacy) ```cs [RoutePrefix("home")] public class HomeController : Controller { [Route("privacy")] public ActionResult Privacy() { return View(); } } ``` #### ASP.NET Core MVC (.NET6) 修改 `Program.cs`,在 ```cs // 記得在 app build 之前加入此設定,把 LowercaseUrls 設為 true builder.Services.Configure(options => { options.LowercaseUrls = true; }); var app = builder.Build(); ``` 而 Route 指定則是直接在 Controller 的 Action 上明確指定 以下範例路徑即會將預設的 /home/privacy 變為 /home/test ``` public class HomeController : Controller { [Route("home/test")] public ActionResult Privacy() { return View(); } } ``` #### 參考資料 - [RouteCollection.LowercaseUrls Property](https://learn.microsoft.com/en-us/dotnet/api/system.web.routing.routecollection.lowercaseurls?view=netframework-4.8&WT.mc_id=DT-MVP-5002629) - [Attribute Routing in ASP.NET MVC 5](https://devblogs.microsoft.com/dotnet/attribute-routing-in-asp-net-mvc-5/?WT.mc_id=DT-MVP-5002629) - [ASP.NET MVC 5 brings attribute based routing](https://www.computerworld.com/article/2705350/asp-net-mvc-5-brings-attribute-based-routing.html) - [ASP.NET Core 中的路由至控制器動作](https://learn.microsoft.com/zh-tw/aspnet/core/mvc/controllers/routing?view=aspnetcore-6.0&WT.mc_id=DT-MVP-5002629) - [How to enforce lowercase routes in .NET 6?](https://stackoverflow.com/questions/70572519/how-to-enforce-lowercase-routes-in-net-6)