.Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南
ASP.NET Core 2.0 发布日期:2017年8月14日
ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET Core 2.0,提供新的Razor Pages项目模板。
详细发布信息查看.NET Core 2.0.0发布说明文档
最新版SDK下载:https://dot.net/core
ASP.NET Core 2.0提供一系列新功能使得Web应用开发、发布、部署和维护变得更加容易,框架性能得到进一步提升。
对于.NET Core 2.0的发布介绍,围绕2.0的架构体系,本系列相关文章:
- .Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南(已发布)
- .Net Core 2.0 生态(2).NET Core 2.0 特性介绍和使用指南(已发布)
- .Net Core 2.0 生态(3)ASP.NET Core 2.0 特性介绍和使用指南(已发布)
- .Net Core 2.0 生态(4)Entity Framework Core 2.0 特性介绍和使用指南(已发布)
前言:答读者问(time by:2017.8.19)
在开始之前先集中回复前两篇文章评论中大家比较关注的问题
- 问题1:工具的更新问题
问题by @軒轅劍:有没单独升级到15.3的更新啊?
答案by @yyww:下载新版本的安装程序,1M多,会自动更新的
VS2017安装程序经过重构变成模块化安装,所以对于15.3版本的更新是增量更新,下载最新的安装程序,会自动检测。
Visual Studio For Mac 7.1也一样,检测软件更新,进行增量更新。
- 问题2:.NET Standard到底是什么?
问题by @wdwwtzy:这个系列不错,想听听 standard 到底是啥,建议深入一些,现在太浅了
问题by @海阔天空XM:几张体系结构图?
.NET Standard是一组API集合,支持.NET Standard的.NET平台之间可以实现代码共享,基于.NET Standard构建的类库可以在支持.NET Standard的.NET平台进行复用,防止代码碎片化。
目前支持.NET Standard 2.0的平台有:
- .NET Framework 4.6.1
- .NET Core 2.0
- Mono 5.4
- Xamarin.iOS 10.14
- Xamarin.Mac 3.8
- Xamarin.Android 7.5
- UWP (预计2017年下半年发布)
在深入一点,看这张图
平台对.NET Standard 支持对应表(by @农码一生)
【图】
- 问题3:关于System.Drawing API是否提供?
问题by @PowerShell免费软件:.net core2正式版了,增加了System.Drawing。
有人在上面成功运行以前的winform程序吗?谁能帮忙搞个hello试试看吗?
命名空间System.Drawing是增加了,只提供了结构体,并没有提供绘图类,相信在接下来的版本会支持。
项目升级到ASP.NET Core 2.0
ASP.NET Core 2.0 可以同时运行在.NET Framework 4.6.1
和 .NET Core 2.0
框架,更改项目目标框架为:netcoreapp2.0
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
在Visual Stdio中可以设置项目属性
也可以手动编辑项目文件,将原项目中Microsoft.AspNetCore.*
引用包升级到2.0
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.0" />
</ItemGroup>
ASP.NET Core 2.0项目发布做了优化,发布文件只包含引用的类库。这个优化有助于使发布过程更流畅,更容易分发Web应用程序。
将 ASP.NET Core 1.0 升级到 2.0 详细内容可以参看这篇文章。
新增功能:Razor Pages介绍
ASP.NET Core 2.0中,提供一种新的编码方式,这种方式在页面逻辑集中的场景下比使用MVC架构开发更加简单。
Razor Pages是页面优先的架构,允许用户开发界面时,使用简单的服务端交互方式,通过页面模型对象(Page Model)进行数据交互,而无需控制器中转。
在项目启动文件中,添加代码
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// 包含对Razor Pages 和控制器支持.
services.AddMvc();
}
public void Configure(IApplicationBuilder app)
{
app.UseMvc();
}
}
当在服务注册中调用AddMvc方法时会激活Razor Pages功能。
添加一个测试页面,放在Pages目录下,命名为Now.cshtml
。
@page
<html>
<body>
<h2>The server-local time now is:</h2>
<p>@DateTime.Now</p>
</body>
</html>
这看起来像是标准的Razor视图,只是在页面顶部添加标记@page
,就定义该页面为独立的Razor Page,在页面中依然可以使用 HtmlHelpers, TagHelpers 或者.NET 代码,可以像在Razor视图中一样定义方法,只需添加块级元素@functions
,然后在其内部编写代码。
@page
@functions {
public string FormatDate(DateTime theTime) {
return theTime.ToString("d");
}
}
<html>
<body>
<h2>The server-local time now is:</h2>
<p>@FormatDate(DateTime.Now)</p>
</body>
</html>
结合使用PageModel对象,可以创建更加复杂的页面交互,PageModel是一个MVVM架构概念,相当于视图模型(VM),允许执行方法并将属性绑定到对应的页面中。在Pages目录中创建一个NowModel.cshtml.cs
类。
namespace MyFirstRazorPage.Pages
{
public class NowModel : PageModel
{
private IFileProvider _FileProvider;
public NowModel(PhysicalFileProvider fileProvider)
{
_FileProvider = fileProvider;
LastModified = _FileProvider.GetFileInfo("Pages/Now.cshtml").LastModified.LocalDateTime;
}
public DateTime LastModified { get; set; }
public void OnGet() { }
}
}
这个类继承自PageModel,根据页面业务需要可以构建与页面交互的逻辑类,并且可以对该类中的业务逻辑进行单元测试。在本例中,将LastModified属性加载到页面。另外注意OnGet
方法用来声明PageModel可以响应HTTP GET请求。
更新Razor Page,使用PageModel定义的LastModified属性。
@page
@model MyFirstRazorPage.Pages.NowModel
<html>
<body>
<h2>This page was last updated:</h2>
<p>@Model.LastModified</p>
</body>
</html>
更多Razor Pages详细介绍参看资料。
模板更新
模板已经增强,不仅包含MVC模式的Web应用程序模板,也包含Razor Pages Web应用程序模板,还包含一系列单页应用(SPA)程序模板。这些单页模板使用Javascript服务功能在ASP.NET Core服务中嵌入NodeJS,将JavaScript应用程序服务器作为项目中的一部分进行编译。
命令行工具提供的内置项目模板
Entity Framework Core 2.0提供DbContext池
参看:Entity Framework Core 2.0发布(稍后发布,会用单独一篇文章总结)
监视器、无代码更改配置、应用程序监视器
运行在Azure应用服务上的ASP.NET Core 2.0项目无需修改,提供性能分析、错误报告和Azure应用程序监视功能。
在Visual Studio 2017中右键项目,Add->Application Insights Telemetry,启动应用程序数据收集,然后可以直接预览日志信息和应用程序性能报告。
这个功能可以让我们在开发阶段,对应用程序性能做出测试和反馈,当程序发布到Azure之后,可以在Azure门户中进行分析和调试,程序信息的收集从第一次发布应用程序并导航到云门户时开始。Azure将会以一个紫色横幅提示您,这表明应用程序监视和分析功能是可用的。
点击进入查看应用程序监视服务,无需重新编译和部署,应用程序监视服务将开始报告捕获到的活动数据。
数据报告显示了应用程序中失败的请求和错误的数量。单击关注的数据项,将展示关于失败请求的详细信息:
上图中抛出一个System.Exception
,点击查看异常报告,可以查看抛出异常的详细信息,包括调用堆栈:
应用程序监视的快照调试现在支持ASP.NET Core 2.0应用。如果设置在应用程序中配置快照调试,则顶部的“打开调试快照”链接将显示并显示完整的调用堆栈,可以单击堆栈中的方法来查看本地变量:
好了!我们可以更进一步,点击右上角的“下载快照”按钮,在Visual Studio中启动一个异常调试会话。
这些页面的性能如何?从应用程序监视页面中,选择左侧的性能选项,深入地研究每个请求在应用程序的性能跟踪。
更多信息参看使用应用程序洞察的性能分析。
如果您想要使用您的应用程序的原始日志,您可以在应用程序服务中启用诊断日志,并将诊断级别设置为警告或错误,以查看该异常被抛出。
最后,选择左边的日志流,您可以看到您在开发人员工作站上所拥有的控制台。选择将在Azure中触发的严重级别或更大级别的错误和日志消息。
所有应用程序感知功能都可以在 ASP.NET Core 中使用,不用重新编译和部署。快照调试需要添加额外的步骤和一些代码,而配置就像在启动类中添加额外代码一样简单。
更新信息参看:应用程序洞察在线文档
Razor支持C# 7.1
Razor视图引擎借助Roslyn编译器支持C# 7.1功能,比如:默认表达式、推断的元组名称和模式匹配泛型。要在项目中使用c# 7.1特性,在项目文件中添加以下属性,然后重新加载解决方案:
<LangVersion>latest</LangVersion>
C# 7.1本身还是预览版状态,可以在其GitHub存储库中查看这些特性的语言规范。
简化应用程序的主机配置
主机配置已经大大简化,默认ASP.NET Core项目模板中提供WebHost.CreateDefaultBuilder
,自动分配一个Kestrel服务器,如果IIS可用则尝试运行在IIS上,并配置标准控制台日志提供程序。
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
总结
ASP.NET Core 2.0提供的一系列新功能提供编写应用程序的新方法,简化了应用程序在生产环境的管理和维护。