.NET Core 3.0预览版7中的ASP.NET Core和Blazor更新
.NET Core 3.0 Preview 7现已推出,它包含一系列ASP.NET Core和Blazor的新更新。
以下是此预览中的新功能列表:
- 最新的Visual Studio预览包括.NET Core 3.0作为默认运行时
- Visual Studio中的顶级ASP.NET核心模板
- 简化的网页模板
- 组件的属性splatting
- TypeConverters和泛型的数据绑定支持
- 阐明了哪些指令属性需要HTML vs C#
- EventCounters
- gRPC模板中的HTTPS
- gRPC客户端改进
- gRPC Metapackage
- 用于管理gRPC代码生成的CLI工具
有关其他详细信息和已知问题,请参阅发行说明。
开始吧
要在.NET Core 3.0 Preview 7中开始使用ASP.NET Core,请安装.NET Core 3.0 Preview 7 SDK
如果您使用Visual Studio在Windows上,请安装Visual Studio 2019的最新预览。
注意:.NET Core 3.0 Preview 7需要Visual Studio 2019 16.3预览1,现在可用!
要安装最新的客户端Blazor模板,还请运行以下命令:
dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.0.0-preview7.19365.7
不再需要安装Blazor Visual Studio扩展,如果您安装了以前的版本,则可以将其卸载。现在,您需要从命令行安装Blazor WebAssembly模板才能使它们显示在Visual Studio中。
升级现有项目
要将现有的ASP.NET Core应用程序升级到.NET Core 3.0 Preview 7,请按照ASP.NET Core文档中的迁移步骤进行操作。
另请参阅ASP.NET Core 3.0 中的重大更改的完整列表。
要将现有的ASP.NET Core 3.0 Preview 6项目升级到Preview 7:
- 更新Microsoft.AspNetCore。*包引用3.0.0-preview7.19365.7。
而已!你应该准备好了。
最新的Visual Studio预览包括.NET Core 3.0作为默认运行时
Visual Studio(16.3)的最新预览更新包括.NET Core 3.0作为默认的.NET Core运行时版本。这意味着如果您安装Visual Studio的最新预览,那么您已经拥有.NET Core 3.0。默认情况下,新项目将以.NET Core 3.0为目标
Visual Studio中的顶级ASP.NET Core 模板
现在,ASP.NET Core模板在“创建新项目”对话框中显示为Visual Studio中的顶级模板。
这意味着您现在可以搜索各种ASP.NET Core模板并按项目类型(Web,服务,库等)进行筛选,以找到您要使用的模板。
简化的网页模板
我们采取了一些措施来进一步简化Web应用程序模板,以减少经常被删除的代码量。
特别:
- 默认情况下,Cookie同意UI不再包含在Web应用程序模板中。
- 脚本和相关的静态资产现在被引用为本地文件,而不是基于当前环境使用CDN。
我们将根据需要提供样本和文档,以便将这些功能添加到新应用程序中。
组件的属性splatting
除了组件声明的参数之外,组件现在还可以捕获和呈现其他属性。可以在字典中捕获其他属性,然后使用新的@attributes
Razor指令将其“splat”到元素上,作为组件渲染的一部分。在定义生成支持各种自定义的标记元素的组件时,此功能特别有用。例如,如果您正在定义一个生成<input>
元素的组件,那么定义所有<input>
支持的属性maxlength
或placeholder
组件参数将非常繁琐。
接受任意参数
以限定一个接受任意属性定义使用的成分参数的组件[Parameter]
与属性CaptureUnmatchedValues
设置为true属性。参数的类型必须可从中分配Dictionary<string, object>
。这意味着IEnumerable<KeyValuePair<string, object>>
或者IReadOnlyDictionary<string, object>
也是选项。
@code {
[Parameter(CaptureUnmatchedValues= true)]
Dictionary<string, object> Attributes { get; set; }
}
该CaptureUnmatchedValues
物业在[Parameter]
允许的参数匹配不匹配任何其他参数的所有属性。组件只能定义单个参数CaptureUnmatchedValues
。
使用@attributes呈现任意属性
组件可以使用@attributes
directive属性将任意属性传递给另一个组件或标记元素。该@attributes
指令允许您指定要传递给标记元素或组件的属性集合。这很有价值,因为指定为属性的键值对集合可以来自.NET集合,不需要在组件的源代码中指定。
<input class="form-field" @attributes="Attributes" type="text" />
@code {
[Parameter(CaptureUnmatchedValues = true)]
Dictionary<string, object> Attributes { get; set; }
}
使用该@attributes
指令,Attribute
属性的内容将“splatted”到输入元素上。如果这导致重复属性,则属性的评估从左到右进行。在上面的例子中,如果Attributes
还包含一个值,class
它将取代class="form-field"
。如果Attributes
包含type
那个将被取代的值type="text"
。
TypeConverters和泛型的数据绑定支持
Blazor现在支持数据绑定到具有字符串的类型TypeConverter
。许多内置框架类型,例如Guid
并且TimeSpan
有一个字符串TypeConverter
,或者您可以TypeConverter
自己定义带有字符串的自定义类型。这些类型现在可以与数据绑定无缝协作:
<input @bind="guid" />
<p>@guid</p>
@code {
Guid guid;
}
数据绑定现在也适用于泛型。在通用组件中,您现在可以绑定到使用泛型类型参数指定的类型。
@typeparam T
<input @bind="value" />
<p>@value</p>
@code {
T value;
}
阐明了哪些指令属性需要HTML vs C#
在Preview 6中,我们引入了指令属性作为Razor编译器相关功能的通用语法,如指定事件处理程序(@onclick
)和数据绑定(@bind
)。在此更新中,我们清理了哪些内置指令属性需要C#和HTML。具体来说,事件处理程序现在需要C#值,因此@
在指定事件处理程序值时不再需要前导字符:
@* Before *@
<button @onclick="@OnClick">Click me</button>
@* After *@
<button @onclick="OnClick">Click me</button>
EventCounters
代替Windows性能计数器,.NET Core引入了一种通过EventCounters发出指标的新方法。在preview7中,我们现在发出EventCounters ASP.NET Core。您可以使用dotnet counters
全局工具查看我们发出的指标。
dotnet counters
通过运行以下命令安装最新预览:
dotnet tool install --global dotnet-counters --version 3.0.0-preview7.19365.2
主机
Hosting EventSourceProvider(Microsoft.AspNetCore.Hosting
)现在发出以下请求计数器:
requests-per-second
total-requests
current-requests
failed-requests
SignalR
除托管外,SignalR(Microsoft.AspNetCore.Http.Connections
)还会发出以下连接计数器:
connections-started
connections-stopped
connections-timed-out
connections-duration
要查看ASP.NET Core发出的所有计数器,您可以启动dotnet计数器并指定所需的提供程序。下面的示例显示了订阅Microsoft.AspNetCore.Hosting
和System.Runtime
提供者发出的事件时的输出。
dotnet counters monitor -p <PID> Microsoft.AspNetCore.Hosting System.Runtime
NPM中SignalR的JavaScript客户端的新软件包ID
在Azure的SignalR服务可以更容易non-.NET开发商利用SignalR的实时功能。我们从希望通过Azure SignalR服务启用SignalR应用程序的潜在客户那里得到的一个常见问题是“它只适用于ASP.NET吗?”ASP.NET核心SignalR的前身份 - 其中包括@aspnet
组织NPM,进一步混淆了新的SignalR用户。
为了缓解这种混淆,从3.0.0-preview7开始,SignalR JavaScript客户端将从更改@aspnet/signalr
为@microsoft/signalr
。要对此更改做出反应,您需要更改package.json文件,require语句和ECMAScript import语句中的引用。如果您有兴趣提供有关此移动的反馈或了解思考过程,团队会对此GitHub问题做出更改,阅读和/或贡献,团队与社区进行公开讨论。
新的可定制SignalR Hub方法授权
使用Preview 7,当集线器方法需要授权时,SignalR现在为授权处理程序提供自定义资源。资源是一个实例HubInvocationContext
。的HubInvocationContext
包括HubCallerContext
,被调用的方法集线器的名称和参数传递给轮毂的方法。
考虑允许通过Azure Active Directory进行多个组织登录的聊天室示例。拥有Microsoft帐户的任何人都可以登录聊天,但只有拥有组织的成员才能禁止用户或查看用户的聊天记录。此外,我们可能希望限制某些用户的某些功能。使用预览7中的更新功能,这是完全可能的。请注意该如何DomainRestrictedRequirement
作为自定义IAuthorizationRequirement
。现在HubInvocationContext
传入资源参数,内部逻辑可以检查调用Hub的上下文,并决定允许用户执行各个Hub方法。
public class DomainRestrictedRequirement :
AuthorizationHandler<DomainRestrictedRequirement, HubInvocationContext>,
IAuthorizationRequirement
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
DomainRestrictedRequirement requirement,
HubInvocationContext resource)
{
if (IsUserAllowedToDoThis(resource.HubMethodName, context.User.Identity.Name) &&
context.User != null &&
context.User.Identity != null &&
context.User.Identity.Name.EndsWith("@jabbr.net", StringComparison.OrdinalIgnoreCase))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
private bool IsUserAllowedToDoThis(string hubMethodName,
string currentUsername)
{
return !(currentUsername.Equals("bob42@jabbr.net", StringComparison.OrdinalIgnoreCase) &&
hubMethodName.Equals("banUser", StringComparison.OrdinalIgnoreCase));
}
}
现在,可以使用代码在运行时需要检查的策略名称来装饰各个Hub方法。当客户端尝试调用各个Hub方法时,DomainRestrictedRequirement
处理程序将运行并控制对方法的访问。根据DomainRestrictedRequirement
控件访问的方式,所有登录用户都应该能够调用该SendMessage
方法,只有使用@jabbr.net
电子邮件地址登录的用户才能查看用户的历史记录,并且 - 除了bob42@jabbr.net
- 将是能够禁止用户进入聊天室。
[Authorize]
public class ChatHub : Hub
{
public void SendMessage(string message)
{
}
[Authorize("DomainRestricted")]
public void BanUser(string username)
{
}
[Authorize("DomainRestricted")]
public void ViewUserHistory(string username)
{
}
}
创建DomainRestricted
策略就像使用授权中间件进行连接一样简单。在Startup.cs
,添加新策略,将自定义DomainRestrictedRequirement
要求作为参数提供。
services
.AddAuthorization(options =>
{
options.AddPolicy("DomainRestricted", policy =>
{
policy.Requirements.Add(new DomainRestrictedRequirement());
});
});
必须注意的是,在这个例子中,DomainRestrictedRequirement
该类不仅是一个,IAuthorizationRequirement
而且也是它自己AuthorizationHandler
的要求。可以将它们分成单独的类来分离关注点。然而,通过这种方式,没有必要注入AuthorizationHandler
期间Startup
,因为需求和处理程序是相同的,所以不需要单独注入处理程序。
gRPC模板中的HTTPS
gRPC模板现已更新为默认使用HTTPS。在开发时,我们继续使用该dotnet dev-certs
工具生成的相同证书,在生产过程中,您仍需要提供自己的证书。
gRPC客户端改进
托管的gRPC客户端(Grpc.Net.Client
)已更新为目标.NET Standard 2.1,不再依赖于仅存在于.NET Core 3.0中的类型。这可能使我们能够在将来在其他平台上运行。
gRPC Metapackage
在3.0.0-preview7中,我们引入了一个新的包Grpc.AspNetCore
,它可以传递地引用构建gRPC项目所需的所有其他运行时和工具依赖性。推理元数据包的单个包版本应该使开发人员更容易处理,而不是独立版本的多个依赖项。
用于管理gRPC代码生成的CLI工具
新的dotnet-grpc
全局工具使管理protobuf文件及其代码生成设置变得更加容易。全局工具管理添加和删除protobuf文件以及添加构建和运行gRPC应用程序所需的必需包引用。
dotnet-grpc
通过运行以下命令安装最新预览:
dotnet tool install --global dotnet-grpc --version 0.1.22-pre2
例如,您可以运行以下命令来生成protobuf文件,并将其添加到项目中以生成代码。如果您在非Web项目上尝试此操作,我们将默认生成客户端并添加所需的包依赖项。
dotnet new proto -o .\Protos\mailbox.proto
dotnet grpc add-file .\Protos\mailbox.proto
.NET Core 3.0预览版7中的ASP.NET Core和Blazor更新的更多相关文章
- 【译】.NET 7 预览版 1 中的 ASP.NET Core 更新
原文 | Daniel Roth 翻译 | 郑子铭 .NET 7 预览版 1 现已推出!这是 .NET 下一个主要版本的第一个预览版,其中将包括使用 ASP.NET Core 进行 Web 开发的下一 ...
- .NET 7 预览版2 中的 ASP.NET Core 更新
.NET 7 预览版2 现已推出,其中包括对ASP.NET Core 的许多重大改进. 以下是此预览版中新增内容的摘要: 推断来自服务的API 控制器操作参数 SignalR 集线器方法的依赖注入 为 ...
- 微软.NET CORE 3.0 预览版 7 发布:大幅减少 SDK 空间大小
据悉,这个预览版是 .Net Core 3 中重要的版本,可以视为原计划在 7 月发布的 RC 版本 (引自微软 .NET Core 首席 Program Manager Richard 先生原话), ...
- ASP.NET Core 3.0预览版体验
目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3,对应ASP.NET Core 3.0 Preview 3. ASP.NET Core 3.0 之后将不再支持.NE ...
- 安装.NET Core 3.0预览版后VS项目目标框架中不显示的解决方法
下载了微软在GitHub上的cSharpSamples项目后发现其中一些项目使用框架为.NET Core3.0,就下载了.NET Core3.0,但发现项目依然不可用,编译时提示如下 当前 .net ...
- .NET 5.0预览版6发布:支持Windows ARM64设备
2020年6月25日,微软dotnet团队在博客宣布了第六个 .NET 5.0 的预览版:https://devblogs.microsoft.com/dotnet/announcing-net-5- ...
- Apache Spark 3.0 预览版正式发布,多项重大功能发布
2019年11月08日 数砖的 Xingbo Jiang 大佬给社区发了一封邮件,宣布 Apache Spark 3.0 预览版正式发布,这个版本主要是为了对即将发布的 Apache Spark 3. ...
- Dubbo 3.0 预览版解读,6到飞起~
, false).start(); ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new St ...
- 根据 Power BI Desktop(预览版)中的报表页创建工具提示
根据 Power BI Desktop 中创建的报表页,可创建直观丰富的报表工具提示,这些提示在你将鼠标悬停在视觉对象上时显示. 通过创建用作工具提示的报表页,使自定义工具提示包含视觉对象.图像以及在 ...
随机推荐
- 并发编程-concurrent指南-阻塞队列-优先级的阻塞队列PriorityBlockingQueue
PriorityBlockingQueue是一个支持优先级的无界阻塞队列. 它使用了和类 java.util.PriorityQueue 一样的排序规则.你无法向这个队列中插入 null 值. 所有插 ...
- 从同步原语看非阻塞同步以及Java中的应用
非阻塞同步:基于冲突检测的乐观并发策略,通俗讲就是先进行操作,如果没有其他线程争用共享数据,那操作就成功了,如果争用数据有冲突那就采用其他的补偿措施(最常见的就是不断重试直到成功),这种乐观的并发策略 ...
- HDU 5618:Jam's problem again(CDQ分治+树状数组处理三维偏序)
http://acm.hdu.edu.cn/showproblem.php?pid=5618 题意:…… 思路:和NEUOJ那题一样的.重新写了遍理解了一下,算作处理三维偏序的模板了. #includ ...
- centos7安装hadoop完全分布式集群
groupadd test //新建test工作组 useradd -g test phpq //新建phpq用户并增加到test工作组 userdel 选项 用 ...
- Git使用小技巧之Stash命令藏储零乱分支
想要获取更多文章可以访问我的博客 - 代码无止境. 在开发的过程中可能会经常出现下面这种情况,我们正在开发某个功能,当前分支的内容比较乱,不太适合提交,而此时我们需要切换到其他分支上处理一些事情.这 ...
- k8s学习 - API
k8s学习 - API 之前对k8s并没有很深入的了解,最近想把手头一个项目全部放到k8s上,以方便部署,需要研究.这里记录一下自己研究过程中头脑中的理解. k8s 和 docker 首先,需要先理解 ...
- 关于安装了git或者小乌龟(TortoiseGit)使用之后出现红色! 绿色√ 蓝色?的解决办法:
在当前目录中新建文件保存为(删除git信息.bat)在其写入:for /r . %%a in (.) do @if exist "%%a\.git" rd /s /q " ...
- Spring boot ,dubbo整合异常
Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException: com.guooo.boot.acc.serv ...
- 通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!
网上关于Java中锁的话题可以说资料相当丰富,但相关内容总感觉是一大串术语的罗列,让人云里雾里,读完就忘.本文希望能为Java新人做一篇通俗易懂的整合,旨在消除对各种各样锁的术语的恐惧感,对每种锁的底 ...
- Neo4j电影关系图Cypher
, tagline:'Welcome to the Real World'}) }) }) }) }) }) }) }) CREATE (Keanu)-[:ACTED_IN {roles:['Neo' ...