.NET Core 2.2 新增部分功能使用尝鲜

https://www.cnblogs.com/viter/p/10070248.html

前言

    美国当地时间12月4日,微软2019开发者大会中发布了一系列的重磅消息,包含了软硬件和开源社区的各种好消息是铺天盖地,作为一名普通的开发者,我第一时间下载了 .NET Core 2.2 的源码,针对发布说明逐条浏览,并截取了部分常用的功能进行尝试,下面就与大家分享。

  1. 对 API 接口统一大小写的支持

    1.1 查看以下接口代码

    [HttpGet]

    public ActionResult 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(@"[1]$")]

public string Name { get; set; }

[StringLength(20), RegularExpression(@"[2]$")]

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

{

///



/// A filter that specifies the type of the value and status code returned by the action.

///

[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 早日到来

您随手点赞是我不断书写的动力,如有错误,欢迎指正

出处:http://www.cnblogs.com/viter/


  1. a-zA-Z ↩︎

  2. a-zA-Z ↩︎

NET Core 2.2的更多相关文章

  1. ASP.NET Core 之 Identity 入门(一)

    前言 在 ASP.NET Core 中,仍然沿用了 ASP.NET里面的 Identity 组件库,负责对用户的身份进行认证,总体来说的话,没有MVC 5 里面那么复杂,因为在MVC 5里面引入了OW ...

  2. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  3. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  4. .Net Core MVC 网站开发(Ninesky) 2.4、添加栏目与异步方法

    在2.3中完成依赖注入后,这次主要实现栏目的添加功能.按照前面思路栏目有三种类型,常规栏目即可以添加子栏目也可以选择是否添加内容,内容又可以分文章或其他类型,所以还要添加一个模块功能.这次主要实现栏目 ...

  5. ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”

    DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...

  6. EntityFramework Core Raw SQL

    前言 本节我们来讲讲EF Core中的原始查询,目前在项目中对于简单的查询直接通过EF就可以解决,但是涉及到多表查询时为了一步到位就采用了原始查询的方式进行.下面我们一起来看看. EntityFram ...

  7. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  8. ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”

    在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...

  9. Asp.net Core中使用Session

    前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...

  10. ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入

    原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...

随机推荐

  1. Sql Server的还原和导入数据效果不一样

    SQL SERVER2012数据库,导入数据和通过备份还原的效果不一样,如果之前的数据库结构修改过,那么另一个数据在导这个数据库时就会有问题,数据有丢失,这时候就要通过备份还原来同步数据.

  2. Gtk基础学习总结(二)

    一.信号.事件 void g_signal_connect(instance,char* signalName,callback,gpointerobject); //instance:gtk控件 i ...

  3. C++(三十一) — 静态成员变量、静态成员函数

    1.静态成员变量 类的静态成员变量是,由该类的所以对象共同维护和使用的数据成员,每个类只有一个副本,是类数据成员的一种特例.采用 static 关键字声明. 目的:实现同一类中不同对象之间的数据共享. ...

  4. 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理

    重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有 ...

  5. Hessian序列化

    当子类定义了和父类同名的属性时,经过hessian传输,会导致该属性值丢失.因为hessian发送二进制数据时,子类数据在前,父类数据在后.接收二进制数据时,子类数据在前,父类数据在后.所以对于同名字 ...

  6. 【zznu-夏季队内积分赛3-I】逛超市

    题目描述 “别人总说我瓜,其实我一点也不瓜,大多数时候我都机智的一批“我宝儿姐背包学的太差了,你们谁能帮我解决这道题,我就让他做我的男朋友!宝儿姐现在在逛超市,超市里的种类实在是太多了,每种都有很多很 ...

  7. Shell脚本编写规范

    shell脚本需要有较高的实用性.可维护.可阅读.方便他人阅读,因而需要建立一定的规范来操作 dream361@master:~$ cat test2.sh #!/bin/bash 所使用的bash程 ...

  8. LeetCode OJ:Convert Sorted List to Binary Search Tree(将排序好的链表转换成二叉搜索树)

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...

  9. 【前端工具】seajs打包部署工具spm的使用总结

    相信使用seajs的好处大家都是知道的,接触seajs好像是在半年前,当时还不知道页面阻塞问题,这里不带多余的话了. seajs实现了模块化的开发,一个网站如果分了很多很多模块的话,等开发完成了,发现 ...

  10. C++设计模式之-工厂模式的总结

    工厂模式分为3种,即简单工厂模式.工厂方法模式.抽象工厂模式,其实大同小异,总结下来就是: 简单工厂模式:一个工厂,多个产品.产品需要有一个虚基类.通过传入参数,生成具体产品对象,并利用基类指针指向此 ...