.NET Core 2.2 新增部分功能使用尝鲜
前言
????美國當(dāng)?shù)貢r間12月4日,微軟2019開發(fā)者大會中發(fā)布了一系列的重磅消息,包含了軟硬件和開源社區(qū)的各種好消息是鋪天蓋地,作為一名普通的開發(fā)者,我第一時間下載了 .NET Core 2.2 的源碼,針對發(fā)布說明逐條瀏覽,并截取了部分常用的功能進(jìn)行嘗試,下面就與大家分享。
1. 對 API 接口統(tǒng)一大小寫的支持
1.1 查看以下接口代碼
1.2 默認(rèn)情況下,字典內(nèi)地字段名稱將不會被應(yīng)用 CamelCaseNamingStrategy ,所以如果要保持字段名稱大小寫統(tǒng)一的問題,可在 ConfigureServices 中加入 AddJsonOptions(o => o.UseCamelCasing(true))
AddJsonOptions 內(nèi)置兩個默認(rèn)擴(kuò)展,你可以使用 UseCamelCasing 或者 UseMemberCasing ,如果使用 UseMemberCasing ,表示使用成員字段的大小寫規(guī)則,即不改變大小寫輸出
1.3 有意思的是,AddJsonOptions(o => o.UseCamelCasing(true)) 顯式傳入值的方式是由 JamesNK 這個哥們杠出來的結(jié)果,詳見
2. 復(fù)合驗(yàn)證-驗(yàn)證模型的擴(kuò)展
1.1 在之前的版本中,如果希望對一個屬性應(yīng)用多個驗(yàn)證,必須書寫多個驗(yàn)證類,如
2.2 在 .NET Core 2.2 以后的版本中,你可以通過擴(kuò)展來避免這個問題,通過繼承自 ValidationProviderAttribute 并重寫 GetValidationAttributes 方法來實(shí)現(xiàn)復(fù)合驗(yàn)證
2.3 看起來是不是簡潔多了
3. API Controller 增加默認(rèn)的響應(yīng)處理類型
3.1 在以前的版本中,可以通過在 API 上增加特性 ProducesResponseType 來處理不同的 HttpCode 響應(yīng),然后 pranavkm 覺得,我們應(yīng)該像 Swagger/OpenApi 一樣,增加一個默認(rèn)的響應(yīng)處理類型,然后就出現(xiàn)了
3.2 說實(shí)話,上面的這個類,我沒搞懂到底怎么用,有知道的朋友請?jiān)谠u論中回復(fù),我將把它加入文中,感謝。
4. Razor 視圖部分優(yōu)化
4.1 .NET Core 團(tuán)隊(duì)認(rèn)為,在 Razor 視圖中,如果使用 @Html.Parital 引入分部視圖,可能存在潛在的死鎖情況,所以將 @Html.Parital 變更為
前言
美國當(dāng)?shù)貢r間12月4日,微軟2019開發(fā)者大會中發(fā)布了一系列的重磅消息,包含了軟硬件和開源社區(qū)的各種好消息是鋪天蓋地,作為一名普通的開發(fā)者,我第一時間下載了 .NET Core 2.2 的源碼,針對發(fā)布說明逐條瀏覽,并截取了部分常用的功能進(jìn)行嘗試,下面就與大家分享。
一、 對 API 接口統(tǒng)一大小寫的支持
1.1 查看以下接口代碼
[HttpGet]public ActionResult<UserInfo> Get()
{
? ?return new UserInfo() { Name = "Ron.liang", RegTime = DateTime.Now };
}
[HttpGet("{id}")]
public ActionResult<Dictionary<string, string>> Get(int id)
{
? ?return new Dictionary<string, string> {
? ? ? ?{ "Name", "Ron.liang" },
? ? ? ?{ "RegTime", DateTime.Now.ToString() }
? ?};
}
// 接口 1 輸出
{
? ?name: "Ron.liang",
? ?regTime: "2018-12-05T10:40:37.5090634+08:00"
}
// 接口 2 輸出
{
? ?Name: "Ron.liang",
? ?RegTime: "2018-12-05T10:40:58.5072645+08:00"
}
1.2 、默認(rèn)情況下,字典內(nèi)地字段名稱將不會被應(yīng)用 CamelCaseNamingStrategy ,所以如果要保持字段名稱大小寫統(tǒng)一的問題,可在 ConfigureServices 中加入 AddJsonOptions(o => o.UseCamelCasing(true))
{
? ?services.AddMvc().AddJsonOptions(o => o.UseCamelCasing(false)).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
AddJsonOptions 內(nèi)置兩個默認(rèn)擴(kuò)展,你可以使用 UseCamelCasing 或者 UseMemberCasing ,如果使用 UseMemberCasing ,表示使用成員字段的大小寫規(guī)則,即不改變大小寫輸出
1.3 、有意思的是,AddJsonOptions(o => o.UseCamelCasing(true)) 顯式傳入值的方式是由 JamesNK 這個哥們杠出來的結(jié)果,詳見https://github.com/aspnet/Mvc/pull/7962
二、 復(fù)合驗(yàn)證-驗(yàn)證模型的擴(kuò)展
2.1、 在之前的版本中,如果希望對一個屬性應(yīng)用多個驗(yàn)證,必須書寫多個驗(yàn)證類,如
{
? ?[StringLength(20), RegularExpression(@"^[a-zA-Z]$")]
? ?public string Name { get; set; }
? ?[StringLength(20), RegularExpression(@"^[a-zA-Z]$")]
? ?public string Title { get; set; }
? ?public DateTime RegTime { get; set; }
}
2.2、 在 .NET Core 2.2 以后的版本中,你可以通過擴(kuò)展來避免這個問題,通過繼承自 ValidationProviderAttribute 并重寫 GetValidationAttributes 方法來實(shí)現(xiàn)復(fù)合驗(yàn)證
{
? ?[Name]
? ?public string Name { get; set; }
? ?[Name]
? ?public string Title { get; set; }
? ?public DateTime RegTime { get; set; }
}
public class NameAttribute : ValidationProviderAttribute
{
? ?public override IEnumerable<ValidationAttribute> GetValidationAttributes()
? ?{
? ? ? ?return new List<ValidationAttribute>
? ? ? ?{
? ? ? ? ? ?new RequiredAttribute(),
? ? ? ? ? ?new RegularExpressionAttribute(pattern: "[A-Za-z]*"),
? ? ? ? ? ?new StringLengthAttribute(maximumLength: 20)
? ? ? ?};
? ?}
}
2.3 、看起來是不是簡潔多了
三、 API Controller 增加默認(rèn)的響應(yīng)處理類型
3.1 、在以前的版本中,可以通過在 API 上增加特性 ProducesResponseType 來處理不同的 HttpCode 響應(yīng),然后 pranavkm 覺得,我們應(yīng)該像 Swagger/OpenApi 一樣,增加一個默認(rèn)的響應(yīng)處理類型,然后就出現(xiàn)了
{
? ?/// <summary>
? ?/// A filter that specifies the type of the value and status code returned by the action.
? ?/// </summary>
? ?[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
? ?public class ProducesResponseTypeAttribute : Attribute, IApiResponseMetadataProvider
{
? ? ? ....
}
3.2 、說實(shí)話,上面的這個類,我沒搞懂到底怎么用,有知道的朋友請?jiān)谠u論中回復(fù),我將把它加入文中,感謝。
四、Razor 視圖部分優(yōu)化
4.1 、.NET Core 團(tuán)隊(duì)認(rèn)為,在 Razor 視圖中,如果使用 @Html.Parital 引入分部視圖,可能存在潛在的死鎖情況,所以將 @Html.Parital 變更為
@Html.Partial("_StatusMessage", Model.StatusMessage)
// 新的:
<partial name="_StatusMessage", for="StatusMessage" />
4.2、 如果你現(xiàn)在嘗試使用 .NET Core 2.2 創(chuàng)建新的 MVC 項(xiàng)目,你就馬上可以看到該變化了
五、鉤子
通過設(shè)置環(huán)境變量,可以在程序 Main 方法運(yùn)行前執(zhí)行一些業(yè)務(wù)邏輯,但是 .NET Core 團(tuán)隊(duì)建議,該功能只是一些低級的鉤子,不要用于復(fù)雜的業(yè)務(wù),如有需要,還是應(yīng)該使用依賴注入,有空再嘗試一下該功能,應(yīng)該會很有意思
結(jié)語
在 .NET Core 2.2 版本中,有很多性能上的優(yōu)化,可以看到開源社區(qū)的力量確實(shí)強(qiáng)大,本文僅節(jié)選了部分常用功能進(jìn)行嘗試,相信后續(xù)會有更多朋友的分享
期待 3.0 早日到來
原文地址:https://www.cnblogs.com/viter/p/10070248.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的.NET Core 2.2 新增部分功能使用尝鲜的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超好用的C#控制台应用模板
- 下一篇: .NET Core实战项目之CMS 第八