.NET Core 2.2 新增部分功能使用尝鲜
前言
美国当地时间12月4日,微软2019开发者大会中发布了一系列的重磅消息,包含了软硬件和开源社区的各种好消息是铺天盖地,作为一名普通的开发者,我第一时间下载了 .NET Core 2.2 的源码,针对发布说明逐条浏览,并截取了部分常用的功能进行尝试,下面就与大家分享。
1. 对 API 接口统一大小写的支持
1.1 查看以下接口代码
1.2 默认情况下,字典内地字段名称将不会被应用 CamelCaseNamingStrategy ,所以如果要保持字段名称大小写统一的问题,可在 ConfigureServices 中加入 AddJsonOptions(o => o.UseCamelCasing(true))
AddJsonOptions 内置两个默认扩展,你可以使用 UseCamelCasing 或者 UseMemberCasing ,如果使用 UseMemberCasing ,表示使用成员字段的大小写规则,即不改变大小写输出
1.3 有意思的是,AddJsonOptions(o => o.UseCamelCasing(true)) 显式传入值的方式是由 JamesNK 这个哥们杠出来的结果,详见
https://github.com/aspnet/Mvc/pull/7962
2. 复合验证-验证模型的扩展
1.1 在之前的版本中,如果希望对一个属性应用多个验证,必须书写多个验证类,如
2.2 在 .NET Core 2.2 以后的版本中,你可以通过扩展来避免这个问题,通过继承自 ValidationProviderAttribute 并重写 GetValidationAttributes 方法来实现复合验证
2.3 看起来是不是简洁多了
3. API Controller 增加默认的响应处理类型
3.1 在以前的版本中,可以通过在 API 上增加特性 ProducesResponseType 来处理不同的 HttpCode 响应,然后 pranavkm 觉得,我们应该像 Swagger/OpenApi 一样,增加一个默认的响应处理类型,然后就出现了
3.2 说实话,上面的这个类,我没搞懂到底怎么用,有知道的朋友请在评论中回复,我将把它加入文中,感谢。
4. Razor 视图部分优化
4.1 .NET Core 团队认为,在 Razor 视图中,如果使用 @Html.Parital 引入分部视图,可能存在潜在的死锁情况,所以将 @Html.Parital 变更为
//旧的:@Html.Partial("_StatusMessage", Model.StatusMessage) // 新的:<partial name="_StatusMessage", for="StatusMessage" />
前言
美国当地时间12月4日,微软2019开发者大会中发布了一系列的重磅消息,包含了软硬件和开源社区的各种好消息是铺天盖地,作为一名普通的开发者,我第一时间下载了 .NET Core 2.2 的源码,针对发布说明逐条浏览,并截取了部分常用的功能进行尝试,下面就与大家分享。
一、 对 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、 在之前的版本中,如果希望对一个属性应用多个验证,必须书写多个验证类,如
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 、看起来是不是简洁多了
三、 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 、说实话,上面的这个类,我没搞懂到底怎么用,有知道的朋友请在评论中回复,我将把它加入文中,感谢。
四、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 项目,你就马上可以看到该变化了
五、钩子
通过设置环境变量,可以在程序 Main 方法运行前执行一些业务逻辑,但是 .NET Core 团队建议,该功能只是一些低级的钩子,不要用于复杂的业务,如有需要,还是应该使用依赖注入,有空再尝试一下该功能,应该会很有意思
结语
在 .NET Core 2.2 版本中,有很多性能上的优化,可以看到开源社区的力量确实强大,本文仅节选了部分常用功能进行尝试,相信后续会有更多朋友的分享
期待 3.0 早日到来
原文地址:https://www.cnblogs.com/viter/p/10070248.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
.NET Core 2.2 新增部分功能使用尝鲜相关推荐
- 手机技巧:安卓微信 8.0.34 内测版更新功能提前尝鲜
目录 更新功能介绍 1.聊天记录正式支持图片搜索 2.消息通知设置增加视频号和直播推送功能 3.划线变「赞」 4.搜一搜页面变化 如何获取更新版本 2023年3月14日最新消息微信官方团队发布了安卓微 ...
- 最新版dotnet-cli下的ASP.NET Core和asp.net mvc【RC2尝鲜】
RC1是http://get.asp.net里面提供的https://docs.asp.net/en/latest/getting-started/index.html,使用旧的ASP.NET Cor ...
- Hackathon 实用指南丨快速给 TiDB 新增一个功能
TiDB Hackathon 2022 火热报名中!你报名了吗(还没报名看这里)?你有 idea 了吗(没有 idea 看这里)? 有了 idea,但是不够了解 TiDB,不知道如何动手实践?本文将通 ...
- ASP.NET 2.0 中的新增安全功能
发布日期: 8/26/2004 | 更新日期: 8/26/2004 Stephen Walther Microsoft Corporation 适用于: Microsoft ASP.NET 2.0 M ...
- ip guard保证java代码安全_IP-guard加密新增四大功能 让一“密“防百疏
近日内网安全管理企业溢信科技旗下的IP-guard透明加密新增四大功能,分别是明文备份服务器.自定义密钥设置.服务器定期备份以及只读加密,从用户加密文档的储存.备份以及查看上提供了更安全的保障和更有效 ...
- 微信小程序新增推广功能,支持自定义关键词
为方便用户找到所需小程序,并帮助小程序更准确地触达用户,微信小程序向开发者提供了自定义关键词的功能.小程序后台新增推广功能,支持开发者添加与业务相关的自定义关键词.开发者可在小程序后台的 " ...
- android11beta支持什么手机,Android 11 Beta1发布,新增多种功能,网友:Android基于 Flyme...
原标题:Android 11 Beta1发布,新增多种功能,网友:Android基于 Flyme 6.11日消息,谷歌于今日凌晨正式推送了 Android 11 Beta 1 版系统,不仅新增了可悬浮 ...
- 鸿蒙行车记录仪,百度导航新增行车记录仪功能 可消除碰瓷风险
年关将至,市区内各类大型商场.超市.菜市场等地人流密集,此类地点非常容易出现意外状况,市民在驾车出行时千万要提高注意力,警惕碰瓷者倒在你面前.如果事先装载行车记录仪,就能避免一桩"冤案&qu ...
- JeeWx 商业版本最近新增什么功能啦?
JeeWx 商业版本最近新增什么功能啦? 2014-12-18 jeecg JEECG jeewx开发新功能 一.微信墙 此功能可以设置属于该公共号的微信墙,在微信客户端上输入微信墙即可进入微信墙模式 ...
最新文章
- 来呀!AI喊你斗地主——首个搞定斗地主的深度神经网络
- 打破定式,突破屏障,走出自己的创意舒适区
- 如何添加sersync进程监控脚本
- 【GAN优化】详解对偶与WGAN
- springmvc常用5种注解_砂石骨料线常用的5种破碎设备、5种筛分和制砂设备特点比较...
- Cookie、session、token对比
- 陶哲轩实分析 引理8.2.7 注
- 数据标准在数据治理中的意义
- HCIE-Security Day31:IPSec:实验(六)配置PPPoE拨号分支与总部建立IPSec隧道示例
- ClassGraph使用
- linux桌面图标主题包,推荐 4 款漂亮的 Linux 图标主题
- 后处理安装_“国六”提前实施,尾气后处理技术如何再升级?
- C_CAPM模型(上)
- 女人喝酸奶要注意什么
- 噩梦系列篇之Player随鼠标转向控制
- 前端(h5)js监控手机电池状况(是否充电、剩余电量、剩余可用时间等等)
- MySql查询表是否被锁
- 牛客网学习笔记——简单题们(二)
- 基于PHP的OA办公系统项目
- oracle11g 常用函数(Functions)详解