IParsable 是 .Net 7 中新增的介面,它可以將字串轉換為對應的實體。在 Controller 的 Route 繫結中可以使用 IParsable 來繫結複雜的實體。
實驗背景
假設有一個需要將 route "report/{month}-{day}" 繫結到 MyDate 物件上的場景。
在 .Net 7 之前,通常是使用兩個引數來接收繫結的 month 和 day,然後在程式碼中例項化 MyDate 物件。例如:
[Route("report/{month}-{day}")]
public ActionResult GetReport(int month, int day)
{
var myDate = new MyDate { Month = month, Day = day };
// 使用 myDate
}
使用 IParsable
在 .Net 7 中,可以直接讓 MyDate 實現 IParsable 介面,然後在 route 中繫結 "report/{myDate}"。這樣 MyDate 就能直接從 route 上繫結,省去了手動例項化的步驟。
下面是一個示例程式碼:
public class MyDate : IParsable<MyDate>
{
public int Month { get; set; }
public int Day { get; set; }
public void Parse(string input)
{
var parts = input.Split('-');
Month = int.Parse(parts[0]);
Day = int.Parse(parts[1]);
}
public static MyDate Parse(string s, IFormatProvider? provider)
{
var date = new MyDate();
date.Parse(s);
return date;
}
public static bool TryParse(string? s, IFormatProvider? provider, out MyDate result)
{
try
{
result = Parse(s, provider);
return true;
}
catch
{
result = default;
return false;
}
}
}
[HttpGet("report/{myDate}")]
public ActionResult GetReport(MyDate myDate)
{
// myDate 已經被正確地繫結
}
參考資料
- IParsable[1]
- 5 new MVC features in .NET 7[2]
本文采用 Chat OpenAI 輔助注水澆築而成,如有雷同,完全有可能。
- 本文作者: newbe36524
- 本文連結: https://www.newbe.pro/ChatAI/How-to-use-IParsable-in-route-binding/
- 版權宣告: 本部落格所有文章除特別宣告外,均採用 BY-NC-SA 許可協議。轉載請註明出處!
參考資料
[1]IParsable: https://learn.microsoft.com/en-us/dotnet/api/system.iparsable-1?view=net-7.0&WT.mc_id=DX-MVP-5003606
[2]5 new MVC features in .NET 7: https://andrewlock.net/5-new-mvc-features-in-dotnet-7/