.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. cocos2d-x入门三 分层设计框架

    helloworld就是一个完整的框架,大致分为四个层次如下: 导演-------场景------图层-----精灵 Director-----Scene----Layer----Sprite 导演类 ...

  2. django教程目录

    什么是web框架? Do a web framework ourselves MVC和MTV模式 django的流程和命令行工具 Django的配置文件(settings) Django URL (路 ...

  3. Qwt中鼠标获取坐标点

    void getPoint(QwtPlot *plot) { QPoint point = plot->canvas()->mapFromGlobal(QCursor::pos()); Q ...

  4. Java管理扩展指南之JMX技术总览

    JMX(Java管理扩展)系列 JMX(Java管理扩展)系列旨在介绍包含于Java基础版本(Java SE)中的JMX技术.本系列提供了如何使用JMX重要技术特性的诸多示例. 一.JMX技术总览简要 ...

  5. CountDownLatch详解

    功能描述 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 常见用法 多个人等一个信号后继续执行操作.例如5个运动员,等一个发令员的枪响. 一个人等多个人的信号. ...

  6. IE 中的 button type默认值问题

    今天遇到一个问题. 将项目页面的渲染模式从 IE7 改为 IE10 后(<meta http-equiv="X-UA-Compatible" content="IE ...

  7. 如何调试nRF5 SDK

    本文将讲述Nordic nRF5 SDK的主要调试手段,以帮助大家快速定位问题,并解决问题.一般来说,你可以通过打log方式,IDE的debug模式,SDK自带的app_error_check函数,以 ...

  8. raid write back / write throught

    RAID write back指的是raid控制器能够将写入的数据写入自己的缓存中,并把它们安排到后续再执行,这样做的好处就是不需要等实际写入磁盘再返回,因此写入更快.对于数据库而言,这一点更为重要, ...

  9. 原生javascript-日期年,月,日联动选择

    在线例子:http://lgy.1zwq.com/dateSwitch/ 月份的判定,由于涉及到过多了判定条件,如果用if else会大大降低性能,建议用switch 语法 getDays:funct ...

  10. Repeat a string repeat a string

    重要的事情说3遍! 重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串. 这是一些对你有帮助的资源: Global String Object 这道题的思路就是按照题目要求一步一步 ...