首頁»ASP.NET».NET Core 2.2 新增部分功能使用嘗鮮

.NET Core 2.2 新增部分功能使用嘗鮮

來源:Ron.liang 發布時間:2018-12-06 閱讀次數:

  美國當地時間12月4日,微軟2019開發者大會中發布了一系列的重磅消息,包含了軟硬件和開源社區的各種好消息是鋪天蓋地,作為一名普通的開發者,我第一時間下載了 .NET Core 2.2 的源碼,針對發布說明逐條瀏覽,并截取了部分常用的功能進行嘗試,下面就與大家分享。

  1. 對 API 接口統一大小寫的支持

  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 默認情況下,字典內地字段名稱將不會被應用 CamelCaseNamingStrategy ,所以如果要保持字段名稱大小寫統一的問題,可在 ConfigureServices 中加入 AddJsonOptions(o => o.UseCamelCasing(true))

   public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().AddJsonOptions(o => o.UseCamelCasing(false)).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

  AddJsonOptions 內置兩個默認擴展,你可以使用 UseCamelCasing 或者 UseMemberCasing ,如果使用 UseMemberCasing ,表示使用成員字段的大小寫規則,即不改變大小寫輸出

  1.3 有意思的是,AddJsonOptions(o => o.UseCamelCasing(true)) 顯式傳入值的方式是由 JamesNK 這個哥們杠出來的結果,詳見

https://github.com/aspnet/Mvc/pull/7962

  2. 復合驗證-驗證模型的擴展

  1.1 在之前的版本中,如果希望對一個屬性應用多個驗證,必須書寫多個驗證類,如

    public class UserInfo
    {
        [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 以后的版本中,你可以通過擴展來避免這個問題,通過繼承自 ValidationProviderAttribute 并重寫 GetValidationAttributes 方法來實現復合驗證

    public class UserInfo
    {
        [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 看起來是不是簡潔多了

  3. API Controller 增加默認的響應處理類型

  3.1 在以前的版本中,可以通過在 API 上增加特性 ProducesResponseType 來處理不同的 HttpCode 響應,然后 pranavkm 覺得,我們應該像 Swagger/OpenApi 一樣,增加一個默認的響應處理類型,然后就出現了

namespace Microsoft.AspNetCore.Mvc
{
    /// <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 說實話,上面的這個類,我沒搞懂到底怎么用,有知道的朋友請在評論中回復,我將把它加入文中,感謝。

  4. Razor 視圖部分優化

  4.1 .NET Core 團隊認為,在 Razor 視圖中,如果使用 @Html.Parital 引入分部視圖,可能存在潛在的死鎖情況,所以將 @Html.Parital 變更為

 //舊的:
 @Html.Partial("_StatusMessage", Model.StatusMessage)

 // 新的:
 <partial name="_StatusMessage", for="StatusMessage" />

  4.2 如果你現在嘗試使用 .NET Core 2.2 創建新的 MVC 項目,你就馬上可以看到該變化了

  5. 鉤子

  5.1 通過設置環境變量,可以在程序 Main 方法運行前執行一些業務邏輯,但是 .NET Core 團隊建議,該功能只是一些低級的鉤子,不要用于復雜的業務,如有需要,還是應該使用依賴注入,有空再嘗試一下該功能,應該會很有意思

  結語

  在 .NET Core 2.2 版本中,有很多性能上的優化,可以看到開源社區的力量確實強大,本文僅節選了部分常用功能進行嘗試,相信后續會有更多朋友的分享

  期待 3.0 早日到來

QQ群:WEB開發者官方群(515171538),驗證消息:10000
微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
網友評論(共0條評論) 正在載入評論......
理智評論文明上網,拒絕惡意謾罵 發表評論 / 共0條評論
登錄會員中心
快乐彩票开奖号码 建瓯市| 昌都县| 高尔夫| 息烽县| 桑植县| 桃江县| 清水县| 沛县| 游戏| 屯昌县| 环江| 柞水县| 微博| 福海县| 辽中县| 东乌珠穆沁旗| 北票市| 深水埗区| 昂仁县| 隆昌县| 东乡族自治县| 奉化市| 当涂县| 广南县| 石河子市| 大关县| 微博| 红河县| 治多县| 财经| 曲沃县| 德令哈市| 特克斯县| 武邑县| 阿勒泰市| 石狮市| 松江区| 边坝县| 门头沟区| 凯里市| 临西县| 瓮安县| 同德县| 左贡县| 乌拉特中旗| 维西| 马山县| 突泉县| 南阳市| 三明市| 仲巴县| 福海县| 广西| 张北县| 柳江县| 舞阳县| 长寿区| 廉江市| 鸡东县| 白城市| 顺平县| 万州区| 柳州市| 涟水县| 滦平县| 淮北市| 青浦区| 商都县| 天峻县| 北流市| 宝清县| 青河县| 资溪县| 武平县| 汾西县| 和田市| 会同县| 阿拉善左旗| 军事| 洛南县| 敦化市| 修水县| 曲阜市| 佛教| 崇仁县| 台中市| 乌鲁木齐市| 定陶县| 偃师市| 五原县| 鄂尔多斯市| 大埔区| 丰原市| 新津县| 乐安县| 锦州市| 洪湖市| 汨罗市| 潼关县| 洱源县| 郸城县| 丁青县| 延吉市| 鄂伦春自治旗| 翼城县| 剑河县| 扶风县| 如东县| 连平县| 施甸县| 乐业县| 维西| 遂宁市| 正阳县| 林州市| 绩溪县| 榕江县| 马龙县| 年辖:市辖区| 德令哈市| 赞皇县| 新邵县| 麟游县| 诸城市| 定结县| 黑山县| 山丹县| 晋宁县| 绿春县| 珲春市| 嘉定区| 肇庆市| 沾益县| 上虞市| 南皮县| 米林县| 岚皋县|