马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

[翻译] ASP.NET Core 3.0 的新增功能

[复制链接]
查看1957 | 回复0 | 2019-9-26 09:21:29 | 显示全部楼层 |阅读模式

目录

  • ASP.NET Core 3.0 的新增功能
    • Blazor
      • Blazor Server
      • Blazor WebAssembly (预览)
      • Razor 组件
    • gRPC
    • SignalR
      • 新的 JSON 序列化
    • 新的 Razor 指令
    • 证书与 Kerberos 身份验证
    • 模板变动
    • 通用主机
      • 主机设置
      • Startup 构造函数注入的更改
    • Kestrel
    • 默认启用 HTTP/2
    • 哀求计数器
    • 终结点路由
    • 运行状况查抄
    • HttpContext 上的管道
    • IIS 中改进了的错误报告
    • 服务脚色服务和辅助脚色 SDK
    • Forwarded 标头中间件的改进
    • 性能提升
    • ASP.NET Core 3.0 仅可在 .NET Core 3.0 上运行
    • 使用 ASP.NET Core 共享框架
    • 从 ASP.NET Core 共享框架中移除的步伐集

ASP.NET Core 3.0 的新增功能

全文翻译自微软官方文档英文版 What's new in ASP.NET Core 3.0

本文重点先容了 ASP.NET Core 3.0 中最紧张的更改,并提供干系文档的连接。

Blazor

Blazor 是 ASP.NET Core 中的一个新的框架,用于使用 .NET 构建交互式的客户端 Web UI:

  • 使用 C# 而不是 JavaScript 创建丰富的交互式 UI。
  • 共享用 .NET 编写的服务器端和客户端应用步伐逻辑。
  • 将 UI 渲染为 HTML 和 CSS,以提供广泛的浏览器支持,包罗移动浏览器。

Blazor 框架支持的场景:

  • 可重用的 UI 组件(Razor 组件)
  • 客户端路由
  • 组件布局
  • 对依赖注入的支持
  • 表单与验证
  • 使用 Razor 类库构建组件库
  • JavaScript 互操纵

有关更多信息,请参阅:ASP.NET Core 中的 Blazor 简介。

Blazor Server

Blazor 将组件渲染逻辑与 UI 更新的逻辑举行相识耦。Blazor Server 支持在服务器上的 ASP.NET Core 应用步伐中承载 Razor 组件。UI 的更新通过一个 SignalR 连接举行处理。Blazor Server 在 ASP.NET Core 3.0 中受支持。

Blazor WebAssembly (预览)

Blazor 应用步伐也可以使用基于 WebAssembly 的 .NET 运行时直接在浏览器中运行。Blazor WebAssembly 在 ASP.NET Core 3.0 中处于预览状态,且不受支持。未来的 ASP.NET Core 版本将支持 Blazor WebAssembly。

Razor 组件

Blazor 应用步伐是由组件 (components) 构建而成的。组件是自包含的用户界面元素,比方页面、对话框大概表单等。组件是普通的 .NET 类,用于界说 UI 呈现逻辑和客户端变乱处理步伐。您可以创建没有 JavaScript 的富交互式 Web 应用步伐。

Blazor 中的组件通常使用 Razor 语法编写,它是 HTML 和 C# 的天然融合。Razor 组件与 Razor Pages(页面)和 MVC 视图 (view) 相似,由于它们都使用 Razor。与基于“哀求-相应”模子的页面与视图差异,组件专门用于处理 UI 合成。

gRPC

gRPC:

  • 是一种盛行的高性能 RPC(长途过程调用)框架。
  • 为 API 开发提供了一种“契约优先“的方式。
  • 使用各种当代的技能,比方:
    • 通过 HTTP/2 传输
    • 使用 Protocol Buffers 作为接口形貌语言
    • 二进制序列化格式
  • 提供以下功能:
    • 身份验证
    • 双向的数据流与流程控制
    • 取消与超时

ASP.NET Core 3.0 中的 gRPC 功能包罗:

  • Grpc.AspNetCore — 一个用于承载 gRPC 服务的 ASP.NET Core 框架。ASP.NET Core 上的 gRPC 可以或许与日志纪录、依赖注入 (DI) 身份验证和授权等标准的 ASP.NET Core 功能集成在一起。
  • Grpc.Net.Client — 一个面向 .NET Core,构建在 HttpClient 上的 gRPC 客户端。
  • Grpc.Net.ClientFactory — 用于将 gRPC 客户端与 HttpClientFactory 集成。

有关更多信息,拜见:ASP.NET Core 上 gRPC 的简介

SignalR

请拜见更新 Signal 代码以获取迁移阐明。SignalR 现在使用 System.Text.Json 来序列化/反序列化 JSON 消息。有关还原为基于 Newtonsoft.Json 的序列化步伐的阐明,请参阅切换到 Newtonsoft.Json。

在 SignalR 的 JavaScript 和 .NET 客户端中,添加了对主动重新连接的支持。默认环境下,客户端实验主动重新连接,并在 2, 10 和 30 秒后(如有须要)重试。假如客户端成功重新连接,它将受到一个新的连接 ID。主动重新连接是选择性加入的:

  1. <code>const connection = new signalR.HubConnectionBuilder()
  2. .withUrl("/chatHub")
  3. .withAutomaticReconnect()
  4. .build();</code>
复制代码

可以通过通报基于毫秒的持续时间数组来指定重新连接间隔:

  1. <code>.withAutomaticReconnect([0, 3000, 5000, 10000, 15000, 30000])
  2. //.withAutomaticReconnect([0, 2000, 10000, 30000]) 默认时间间隔</code>
复制代码

可以传入自界说实现以完全控制重新连接间隔。

假如在前次重新连接间隔之后重新连接失败,则:

  • 客户端以为连接已离线。
  • 客户端克制实验重新连接。

为了在连接中断时提供 UI 反馈,SignalR 客户端 API 已扩展为包罗以下变乱处理步伐:

  • onreconnecting: 为开发职员提供了禁用 UI 或告知用户该应用步伐处于脱机状态的机遇。
  • onreconnected: 重新创建连接后,使开发职员有机遇更新 UI。

以下代码在实验连接时使用 onreconnecting 更新 UI:

  1. <code>connection.onreconnecting((error) => {
  2. const status = `Connection lost due to error "${error}". Reconnecting.`;
  3. document.getElementById("messageInput").disabled = true;
  4. document.getElementById("sendButton").disabled = true;
  5. document.getElementById("connectionStatus").innerText = status;
  6. });</code>
复制代码

以下代码在连接规复时使用 onreconnected 更新 UI:

  1. <code>connection.onreconnected((connectionId) => {
  2. const status = `Connection reestablished. Connected.`;
  3. document.getElementById("messageInput").disabled = false;
  4. document.getElementById("sendButton").disabled = false;
  5. document.getElementById("connectionStatus").innerText = status;
  6. });</code>
复制代码

当 hub 方法需要授权时,SignalR 3.0 及更高版本为授权处理步伐提供自界说资源。该资源是 HubInvocationContext 的实例。HubInvocationContext 包罗:

  • HubCallerContext
  • 正在调用的 hub 方法的名称。
  • hub 方法的参数。

思量以下谈天室应用步伐示例,该应用步伐答应通过 Azure Active Directory 举行多个构造登录。 具有 Microsoft 账户的任何人都可以登录谈天,但只有所属构造的成员可以禁止用户或查看用户的谈天纪录。 该应用可以限定特定用户的某些功能。

  1. <code>public class DomainRestrictedRequirement :
  2. AuthorizationHandler<DomainRestrictedRequirement, HubInvocationContext>,
  3. IAuthorizationRequirement
  4. {
  5. protected override Task HandleRequirementAsync(
  6. AuthorizationHandlerContext context,
  7. DomainRestrictedRequirement requirement,
  8. HubInvocationContext resource)
  9. {
  10. if (context.User?.Identity?.Name == null)
  11. {
  12. return Task.CompletedTask;
  13. }
  14. if (IsUserAllowedToDoThis(
  15. resource.HubMethodName,
  16. context.User.Identity.Name))
  17. {
  18. context.Succeed(requirement);
  19. }
  20. return Task.CompletedTask;
  21. }
  22. private bool IsUserAllowedToDoThis(string hubMethodName, string currentUsername)
  23. {
  24. if (hubMethodName.Equals("banUser",
  25. StringComparison.OrdinalIgnoreCase))
  26. {
  27. return currentUsername.Equals(
  28. "bob42@jabbr.net",
  29. StringComparison.OrdinalIgnoreCase);
  30. }
  31. return currentUsername.EndsWith(
  32. "@jabbr.net",
  33. StringComparison.OrdinalIgnoreCase));
  34. }
  35. }</code>
复制代码

在前面的代码中,DomainRestrictedRequirement 用作自界说 IAuthorizationRequirement。由于通报了 HubInvocationContext 资源,因此内部逻辑可以:

  • 查抄正在调用 hub 的上下文。
  • 决定是否答应用户实行特定的 hub 方法。

可以使用计谋名称来修饰各个 hub 方法,代码会在运行时举行查抄。当客户端实验调用各个 hub 方法时,DomainRestrictedRequirement 处理步伐将会运行并控制对方法的访问。基于 DomainRestrictedRequirement 控制访问的方式:

  • 全部已登任命户都可以调用 SendMessage 方法。
  • 只有使用 @jabbr.net 电子邮件地址登录的用户才能查看用户的汗青纪录。
  • 只有 bob42@jabbr.net 可以禁止用户进入谈天室。
  1. <code>[Authorize]
  2. public class ChatHub : Hub
  3. {
  4. public void SendMessage(string message)
  5. {
  6. }
  7. [Authorize("DomainRestricted")]
  8. public void BanUser(string username)
  9. {
  10. }
  11. [Authorize("DomainRestricted")]
  12. public void ViewUserHistory(string username)
  13. {
  14. }
  15. }</code>
复制代码

创建 DomainRestricted 计谋可能涉及:

  • Startup.cs 中添加新计谋。
  • 将自界说的 DomainRestrictedRequirement 需求作为参数提供。
  • 使用授权中间件注册 DomainRestricted
  1. <code>services
  2. .AddAuthorization(options =>
  3. {
  4. options.AddPolicy("DomainRestricted", policy =>
  5. {
  6. policy.Requirements.Add(new DomainRestrictedRequirement());
  7. });
  8. });</code>
复制代码

SignalR hub 使用终结点路由. SignalR hub 连接先前已显式地完成:

  1. <code>app.UseSignalR(routes =>
  2. {
  3. routes.MapHub<ChatHub>("hubs/chat");
  4. });</code>
复制代码

在从前的版本中,开发职员需要在各个差异的位置启用控制器、Razor 页面和 SignalR hub。显式的连接导致一系列险些雷同的路由片断:

  1. <code>app.UseSignalR(routes =>
  2. {
  3. routes.MapHub<ChatHub>("hubs/chat");
  4. });
  5. app.UseRouting(routes =>
  6. {
  7. routes.MapRazorPages();
  8. });</code>
复制代码

SignalR 3.0 hub 可以通过终结点路由举行路由。使用终结点路由,通常可以在 UseRouting 中设置全部的路由:

  1. <code>app.UseRouting(routes =>
  2. {
  3. routes.MapRazorPages();
  4. routes.MapHub<ChatHub>("hubs/chat");
  5. });</code>
复制代码

ASP.NET Core 3.0 SignalR 添加了:

客户端到服务器的流。通过客户端到服务器的流传输,服务器端方法可以接纳 IAsyncEnumerable 大概 ChannelReader 的实例。在以下 C# 实例中,hub 上的 UploadStream 方法将从客户端接收字符串流:

  1. <code>public async Task UploadStream(IAsyncEnumerable<string> stream)
  2. {
  3. await foreach (var item in stream)
  4. {
  5. // 处理流中的内容
  6. }
  7. }</code>
复制代码

.NET 客户端应用步伐可以将一个 IAsyncEnumerable 大概 ChannelReader 的实例作为上述 UploadStream hub 方法的 stream 参数举行通报。

for 循环完成,且本地函数退出之后,将流完成发送(After the for loop has completed and the local function exits, the stream completion is sent):

  1. <code>async IAsyncEnumerable<string> clientStreamData()
  2. {
  3. for (var i = 0; i < 5; i++)
  4. {
  5. var data = await FetchSomeData();
  6. yield return data;
  7. }
  8. }
  9. await connection.SendAsync("UploadStream", clientStreamData());</code>
复制代码

JavaScript 客户端应用将 SignalR Subject (大概一个 RxJS Subject) 用于上述 UploadStream hub 方法的 stream 参数。

  1. <code>let subject = new signalR.Subject();
  2. await connection.send("StartStream", "MyAsciiArtStream", subject);</code>
复制代码

当 JavaScript 代码捕捉到字符串并准备将其发送到服务器时,它可以使用 subject.next 方法来处理字符串。

  1. <code>subject.next("example");
  2. subject.complete();</code>
复制代码

使用类似前面两个代码段的代码,可以创建及时流式传输体验。

新的 JSON 序列化

现在默认环境下,ASP.NET Core 3.0 使用 System.Text.Json 举行 JSON 序列化:

  • 异步读取和写入 JSON。
  • 针对 UTF-8 文本举行了优化。
  • 通常会比 Newtonsoft.Json 具有更高的性能。

要将 Json.NET 添加到 ASP.NET Core 3.0 请参阅添加基于 Newtonsoft.Json 的 JSON 格式支持。

新的 Razor 指令

以下列表包含了新的 Razor 指令:

  • @attribute — @attribute 指令将给定属性应用于天生页面大概视图的类。比方:@attribute [Authorize]
  • @implements — @implements 指令为天生的类实现一个接口。比方:@implements IDisposable

证书与 Kerberos 身份验证

证书身份验证要求:

  • 设置服务器以接收证书。
  • Startup.Configure 中添加身份验证中间件。
  • Startup.ConfigureServices 中添加证书身份验证服务。
  1. <code>public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddAuthentication(
  4. CertificateAuthenticationDefaults.AuthenticationScheme)
  5. .AddCertificate();
  6. // 其他服务设置已移除。
  7. }
  8. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  9. {
  10. app.UseAuthentication();
  11. // 其他应用设置已移除。
  12. }</code>
复制代码

证书身份验证的选项 (Options) 提供以下功能:

  • 担当自签名证书。
  • 查抄证书吊销。
  • 查抄提供的证书是否具有准确的使用标志。

默认的用户主体 (user principal) 是根据证书属性构建的。用户主体包含一个变乱。通过相应该变乱,可以补充大概替换该主体。有关更多信息,请拜见在 ASP.NET Core 中设置证书身份验证。

Windows 身份验证 已扩展到了 Linux 和 macOS 上。在从前的版本中,Windows 身份验证仅限于 IIS 和 HttpSys。在 ASP.NET Core 3.0 中,Kestrel 可以或许在 Windows, Linux 和 macOS 上为加入了 Windows 域的主机使用 Negotiate(协商), Kerberos 和 NTLM。Kestrel 对这些身份验证架构的支持由 Microsoft.AspNetCore.Authentication.Negotiate NuGet 包提供。与其他身份验证服务一样,在用用步伐范围内设置身份验证,然后设置服务:

  1. <code>public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
  4. .AddNegotiate();
  5. // 其他服务设置已移除。
  6. }
  7. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  8. {
  9. app.UseAuthentication();
  10. // 其他应用设置已移除。
  11. }</code>
复制代码

主机要求:

  • Windows 主机必须将服务主体名称 (SPN) 添加到承载该应用步伐的用户账户中。
  • Linux 和 macOS 主机必须加入域。
    • 必须为 Web 进程创建 SPN。
    • 必须在主机上天生和设置密钥表文件。

有关更多信息,请拜见在 ASP.NET Core 中设置 Windows 身份验证。

模板变动

Web UI 模板(Razor Pages, 带有控制器和视图的 MVC)已删除以下内容:

  • “Cookie 同意” UI 不再包含在内。若要在 ASP.NET Core 3.0 模板天生的应用步伐中启用“Cookie 同意”功能,请参阅 ASP.NET Core 中的通例数据掩护法规 (GDPR) 支持。
  • 现在,脚本和干系的静态资产被作为本地文件引用,而不再使用 CDN。有关更多信息,请拜见脚本和干系的静态资产现在被作为本地文件引用而不再使用 CDN (aspnet/AspNetCore.Docs #14350)。

Angular 模板已更新为使用 Angular 8。

默认环境下,Razor 类库 (RCL) 模板默以为用于 Razor 组件开发。Visual Studio 中新的模板选项为页面和视图提供模板支持。在下令行中从模板创建 RCL 时,请传入 -support-pages-and-views 选项 (dotnet new razorclasslib -support-pages-and-views)。

通用主机

ASP.NET Core 3.0 模板使用 .NET 通用主机。从前的版本使用 WebHostBuilder。使用 .NET Core 通用主机(HostBuilder),可以更好地将 ASP.NET Core 应用步伐与其他非特定与 Web 的服务器方案集成。有关更多信息,请拜见 HostBuilder 替换 WebHostBuilder。

主机设置

在发布 ASP.NET Core 3.0 之前,带有 ASPNETCORE_ 前缀的环境变量会被加载,用于 Web 主机的主机设置。在 3.0 中,AddEvironmentVariables 用于加载带有 DOTNET_ 从前追的环境变量,以使用 CreateDefaultBuilder 举行主机设置。

Startup 构造函数注入的更改

通用主机仅支持一下范例的 Startup 构造函数注入:

  • IHostEnvironment
  • IWebHostEnvironment
  • IConfiguration

仍旧可以将全部服务以参数的情势直接注入 Startup.Configure 方法,拜见 通用主机限定 Startup 构造函数注入 (aspnet/Announcements #353).

Kestrel

  • 为了迁移到通用主机,Kestrel 设置已更新。在 3.0 中,Kestrel 在 ConfigureWebHostDefaults 提供的 Web 主机构建器 (host builder) 上举行设置。
  • 连接适配器 (Connection Adapter) 已从 Kestrel 中删除,并由连接中间件代替 (Connection Middleware)。该中间件类似于 ASP.NET Core 管道中的 HTTP 中间件,但用于较低级别的连接。
  • Kestrel 传输层已在 Connections.Abstractions 中作为公共接口公开。
  • 标头 (header) 和尾部 (trailer) 之间的歧义已通过将尾部标头 (trailing header) 移动到新的集合来解决。
  • 同步 IO API(比方 HttpRequest.Body.Read)是引起线程饥饿进而导致步伐瓦解的常见缘故原由。在 3.0 中,默认环境下 AllowSynchronousIO 被禁用。

有关更多信息,请拜见Kestrel - 从 ASP.NET Core 2.2 迁移到 3.0。

默认启用 HTTP/2

默认环境下,Kestrel 中为 HTTPS 端点启用了 HTTP/2。当操纵体系支持时,对 IIS 大概 HTTP.sys 的 HTTP/2 的支持将被启用。

哀求计数器

Hosting EventSource (Microsoft.AspNetCore.Hosting) 发出与传入哀求有关的以下 EventCounter:

  • requests-per-second
  • total-requests
  • current-requests
  • failed-requests

终结点路由

终结点路由得到了增强,该路由使各种框架(比方 MVC)可以与中间件更好地协同工作:

  • 中间件和终结点的次序可以在 Startup.Configure 的哀求处理管道中举行设置。
  • 终结点和中间件与其他基于 ASP.NET Core 的技能(比方运行状况查抄)举行精良的编排。
  • 终结点可以在中间件和 MVC 中实现各种计谋,比方 CORS 大概授权等。
  • 过滤器和特性 (attribute) 可以被放置在控制器的方法上。

有关更多信息,请拜见 ASP.NET Core 中的路由。

运行状况查抄

运行状况查抄通过通用主机使用终结点路由。在 Startup.Configure 中,使用终结点 URL 大概相对路径,在终结点构建器上调用 MapHealthChecks

  1. <code>app.UseEndpoints(endpoints =>
  2. {
  3. endpoints.MapHealthChecks("/health");
  4. });</code>
复制代码

运行状况查抄终结点可以:

  • 指定一个或多个答应的主机/端口。
  • 要求授权。
  • 要求 CORS。

有关更多信息,请拜见以下文章:

  • 运行状况查抄 - 从 ASP.NET Core 2.2 迁移到 3.0
  • ASP.NET Core 中的运行状况查抄

HttpContext 上的管道

现在可以使用 System.IO.Pipelines API 读取哀求正文并写入相应正文。HttpRequest.BodyReader 属性提供了一个 PipeReader,可以用于读取哀求正文;HttpResponse.BodyWriter 属性提供了一个 PipeWriter,可以用于写入相应正文。HttpRequest.BodyReaderHttpRequest.Body 流的相似物; HttpResponse.BodyWriterHttpResponse.Body 流的相似物。

IIS 中改进了的错误报告

现在,在 IIS 中托管 ASP.NET Core 应用步伐时的启动错误会天生更丰富的诊断数据。这些错误会在适用的环境下使用堆栈跟踪,报告给 Windows 变乱日志。别的,全部的警告、错误和未处理的非常,都会纪录到 Windows 变乱日志中。

服务脚色服务和辅助脚色 SDK

.NET Core 3.0 引入了新的辅助脚色服务 (Worker Service) 应用模板。该模板是在 .NET Core 中编写长时间运行的服务的出发点。

有关更多信息,请拜见:

  • 作为 Windows 服务运行的 .NET Core 辅助脚色 (.NET Core Workers as Windows Services)
  • 在 ASP.NET Core 中使用托管服务实现背景任务
  • 在 Windows 服务中承载 ASP.NET Core

Forwarded 标头中间件的改进

在早期版本的 ASP.NET Core 中,应用在摆设到 Azure Linux 大概除 IIS 之外的任何反向署理之后,调用 UseHsts 和 UseHttpsRedirection 都是有题目的。转发 Linux 和非 IIS 反向署理的方案中先容了从前版本的修复方式。

此场景已在 ASP.NET Core 3.0 中修复。当 ASPNETCORE_FORWARDEDHEADERS_ENABLED 环境变量设置为 true 时,主机将启用 Forwarded 标头中间件。在 ASP.NET Core 的容器镜像中,ASPNETCORE_FORWARDEDHEADERS_ENABLED 已被设置为 true

性能提升

ASP.NET Core 3.0 包罗很多改进,可以淘汰内存使用并提高吞吐量:

  • 在将内置的依赖注入容器用于 scoped 服务时,淘汰内存的使用量。
  • 淘汰整个框架的内存分配,包罗中间件的各类场景和路由。
  • 淘汰 WebSocket 连接的内存使用量。
  • 淘汰 HTTPS 连接的内存使用量,并提高吞吐量。
  • 新的、经过优化的、完全异步的 JSON 序列化器。
  • 淘汰表单 (form) 剖析的内存使用量,并提高吞吐量。

ASP.NET Core 3.0 仅可在 .NET Core 3.0 上运行

从 ASP.NET Core 3.0开始,.NET Framework 不再是受支持的目标框架。以 .NET Framework 为目标的项目可以继续通过使用 .NET Core 2.1 LTS 版本在完全受支持的状态下运行。绝大多数与 ASP.NET Core 2.1.x 干系的软件包,都将在 .NET Core 2.1 的三年恒久支持期内获得支持。(Most ASP.NET Core 2.1.x related packages will be supported indefinitely, beyond the 3 year LTS period for .NET Core 2.1.)

有关迁移的更多信息,请拜见 将代码从 .NET Framework 移植到 .NET Core。

使用 ASP.NET Core 共享框架

Microsoft.AspNetCore.App 元包中包含的 ASP.NET Core 3.0 共享框架 (shared framework) 不再需要项目文件中的显式 元素。在项目文件中使用 Microsoft.NET.Sdk.Web SDK 时,将主动引用共享框架:

  1. <code><Project Sdk="Microsoft.NET.Sdk.Web"></code>
复制代码

从 ASP.NET Core 共享框架中移除的步伐集

从 ASP.NET Core 3.0 共享步伐集中移除的最值得留意的步伐集是:

  • Newtonsoft.Json (Json.NET)。要将 Json.NET 添加到 ASP.NET Core 3.0,请参阅 添加基于 Newtonsoft.Json 的 JSON 格式支持。ASP.NET Core 3.0 引入了 System.Text.Json 来读写 JSON。有关更多信息,请参阅本文档中新的 JSON 序列化。
  • Entity Framework Core

有关共享框架中所移除步伐集的完备列表,请参阅 从 Microsoft.AspNetCore.App 3.0 中移除的步伐集。有关举行此修改的动机,更多信息请参阅Microsoft.AspNetCore.App 在 3.0 中的粉碎性变动 和 ASP.NET Core 3.0 中的更改初探。







来源:https://www.cnblogs.com/vxchin/archive/2019/09/24/whats-new-in-asp-net-core-3-0.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则