.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

.NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新。

下面是该预览版的更新列表:

Razor组件改进:
单项目模板
新的Razer扩展
Endpoint路由集成
预呈现
Razor类库中的Razor组件
改进事件处理
Forms & validation
运行时编译
Worker服务模板
gRPC模板
Angular模板已更新为Angular 7
SPA认证
SignalR与Endpoint路由集成
SignalR Java客户端支持长轮询
其他详细信息和已知问题,请参阅发行说明。

开始
要在.NET Core 3.0 Preview 3中开始使用ASP.NET Core,请安装.NET Core 3.0 Preview 3 SDK

如果您使用的是Visual Studio,则还需要安装Visual Studio 2019的最新预览版【译者注:目前VS2019正式版已经发布,直接安装正式版即可】。

注意:要在Visual Studio 2019中使用.NET Core 3.0预览版,需要启用选项以使用.NET Core SDK预览版,方法是通过【工具>选项>项目和解决方案> .NET Core>使用.NET Core SDK预览版】
升级现有项目
将现有的ASP.NET Core应用程序升级到.NET Core 3.0 Preview 3,请按照ASP.NET Core文档中的迁移步骤进行操作。

另请参阅ASP.NET Core 3.0 中的重大更改的完整列表。

Razor组件改进
在前面的预览中,我们介绍了Razor组件,这是一种用ASP.NET核心构建交互式客户端Web UI的新方法。本节将会介绍我们在该预览更新中对Razor组件所做的各种改进。

单项目模板

Razor组件项目模板现在是单个项目,而不是同一解决方案中的两个项目。所编写的Razor组件位于托管它们的ASP.NET Core应用程序中。同一个ASP.NET Core项目可以包含Razor组件、页面和视图。Razor组件模板与其他ASP.NET Core Web应用程序模板一样,默认情况下也启用了HTTPS。

新的Razer扩展

Razor组件使用Razor语法编写,但编译方式与Razor页面和视图不同。为了明确哪些Razor文件应该编译为Razor组件,我们引入了一个新的文件扩展名:.razor。在Razor组件模板中,所有组件文件现在都使用.razor扩展名。Razor页面和视图仍然使用.cshtml扩展名。

只要使用_RazorComponentInclude MSBuild属性将这些文件标识为Razor组件文件,Razor组件仍然可以使用.cshtml文件扩展名来创建。例如,该版本中的Razor组件模板指定Components文件夹下的所有.cshtml文件为Razor组件。

1: <_RazorComponentInclude>Components***.cshtml
请注意,这个版本中的.razor文件有很多限制。有关已知问题和可用解决方案的列表,请参考发布说明。

Endpoint路由集成

Razor组件现在已经集成到了ASP.NET Core中新的Endpoint路由系统。要在应用程序中启用Razor组件支持,需要在路由配置中使用MapComponentHub。

1: app.UseRouting(routes =>
2: {
3: routes.MapRazorPages();
4: routes.MapComponentHub(“app”);
这会将应用程序配置以接受交互式Razor组件的传入连接,并指定根组件App应该在匹配选择器App的DOM元素中呈现。

预呈现

默认情况下,Razor组件项目模板执行服务端预渲染。也就是说当用户浏览您的应用程序时,服务器将对您的Razor组件执行初始化渲染,并将结果作为纯静态HTML传递给浏览器。然后,浏览器将通过SignalR重新连接到服务器,并将Razor组件切换为完全交互的模式。这两个阶段的交付是有益的,因为:

它提高了站点的感知能力,因为用户界面可以更快地出现,而无需等待进行任何WebSocket连接,甚至运行任何客户端脚本。这对连接速度较慢的用户有着更大的影响,如2G/3G手机。
它可以让搜索引擎很容易的搜索到你的应用程序。
对于使用更快连接的用户(如内网用户),此功能的影响较小,因为无论如何用户界面都应该立即出现。

设置预渲染,Razor组件项目模板不会有静态HTML文件。取而代之的是单个Razor页面/Pages/Index.cshtml,使用Html.RenderComponentAsync() HTML帮助器预呈现应用程序内容。该页面还引用components.server.js脚本,在预呈现和下载内容后设置SignalR 连接。由于这是一个Razor页面,像环境标签助手这样的功能就可以工作了。

Index.cshtml

1: @page “{*clientPath}”
2:
3:
4:
5: …
6:
7:
8: @(await Html.RenderComponentAsync())
9:
10:
11:
12:
除了应用程序加载速度更快之外,还可以在浏览器开发工具中查看下载的HTML源代码,从而可以看到预渲染正在进行。Razor组件在HTML中是完全呈现的。

Razor类库中的Razor组件

现在可以将Razor组件添加到Razor类库中,并使用Razor组件从ASP.NET核心项目引用它们。

在Razer类库中创建可重用的Razer组件:

1、创建Razer组件应用程序

1: dotnet new razorcomponents -o RazorComponentsApp1
2、创建Razer类库

1: dotnet new razorclasslib -o RazorClassLib1
3、添加Component1.razor文件到Razer类库

Component1.razor

1:

Component1


2:
3:

@message


4:
5: @functions {
6: string message = “Hello from a Razor Class Library”!;
7: }
1、 使用Razor组件从ASP.NET Core应用程序引用Razor类库

1: dotnet add RazorComponentsApp1 reference RazorClassLib1
在Razor组件应用程序中,使用@addTagHelper指令从Razor类库导入所有组件,然后在应用程序中使用component1

Index.razor

1: @page “/”
2: @addTagHelper *, RazorClassLib1
3:
4:

Hello, world!


5:
6: Welcome to your new app.
7:
8:
注意:在此版本中,Razer类库与Blazor应用程序并不兼容。另外,Razor类库还不支持静态资源。如果要在库中创建可与Blazor和Razor组件应用程序共享的组件,仍然需要使用Blazor类库。这写问题会在未来的更新中解决。

改进事件处理

新的eventcallback和eventcallback<>类型使得定义组件回调更加简单。例如,考虑以下两个组件:

MyButton.razor

1: Click here and see what happens!
2:
3: @functions {
4: [Parameter] EventCallback OnClick { get; set; }
5: }
UsesMyButton.razor
1:

@text

2:
3:
4:
5: @function {
6: string text;
7:
8: void ShowMessage(UIMouseEventArgs e)
9: {
10: text = “Hello, world!”;
11: }
12: }
onclick回调的类型是EventCallback(取代Action),MyButton直接传递给onclick事件处理程序。编译器处理将委托转换为EventCallback的过程,并将执行其他一些操作,以确保呈现过程具有足够的信息来呈现正确的目标组件。因此,不需要在ShowMessage事件处理程序中显式调用StateHasChanged。编译器处理将委托转换为EventCallback的过程,并将执行其他一些操作,以确保渲染过程具有足够的信息来渲染正确的目标组件。因此,不需要在ShowMessage事件处理程序中显式调用StateHasChanged。

通过使用EventCallback<>类型的OnClick处理程序可以是异步的,而不需要对MyButton进行任何其他代码的修改。

UsesMyButton.razor

1:

@text

2:
3:
4:
5: @function {
6: string text;
7:
8: async Task ShowMessageAsync(UIMouseEventArgs e)
9: {
10: await Task.Yield();
11: text = “Hello, world!”;
12: }
13: }
我们建议在为事件处理和绑定定义组件参数时使用EventCallback and EventCallback。尽可能使用EventCallback<>,因为它是强类型的并且可以向组件的用户提供更好的反馈。当没有传递给回调函数的值时,也使用EventCallback。

Forms&validation

此预览版本添加了用于处理表单和验证的内置组件和基础结构。

使用. net进行客户端web开发的一个好处是能够在客户端和服务器之间共享相同的实现逻辑。验证逻辑是一个很好的逻辑。Razor组件中的新的Forms&validation支持包括使用数据注解处理验证的支持,或者可以插入你喜欢的验证系统。

例如,以下Person类型使用数据注解定义验证逻辑:

1: public class Person
2: {
3: [Required(ErrorMessage = “Enter a name”)]
4: [StringLength(10, ErrorMessage = “That name is too long”)]
5: public string Name { get; set; }
6:
7: [Range(0, 200, ErrorMessage = “Nobody is that old”)]
8: public int AgeInYears { get; set; }
9:
10: [Required]
11: [Range(typeof(bool), “true”, “true”, ErrorMessage = “Must accept terms”)]
12: public bool AcceptsTerms { get; set; }
13: }
以下是如何基于Person模型锁创建的验证表单:

1:
2:
3:
4:
5:


6: Name:
7:


8:


9: Age (years):
10:


11:


12: Accepts terms:
13:


14:
15: Submit
16:
17:
18: @functions {
19: Person person = new Person();
20:
21: void HandleValidSubmit()
22: {
23: Console.WriteLine(“OnValidSubmit”);
24: }
25: }

深圳网站建设

https://www.sz886.com/

你可能感兴趣的:(.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容)