.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提供的一系列新功能提供编写应用程序的新方法,简化了应用程序在生产环境的管理和维护。
.Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南的更多相关文章
- .Net Core 2.0生态(4):Entity Framework Core 2.0 特性介绍和使用指南
前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...
- .Net Core 2.0 生态(2).NET Core 2.0 特性介绍和使用指南
.NET Core 2.0发布日期:2017年8月14日 前言 这一篇会比较长,介绍了.NET Core 2.0新特性.工具支持及系统生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路 ...
- .Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南
.NET Standard 2.0 发布日期:2017年8月14日 公告原文地址 前言 早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据个人经验,微软的产品一般在2.0时 ...
- .Net大局观(2).NET Core 2.0 特性介绍和使用指南
.NET Core 2.0发布日期:2017年8月14日 前言 这一篇会比较长,系统地介绍了.NET Core 2.0及生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路径.提纲来用. ...
- 【EF】Entity Framework Core 2.0 特性介绍和使用指南
阅读目录 前言 获取和使用 新特性 项目升级和核心API变化 下一步计划 遗憾的地方 回到目录 前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升 ...
- 008.Adding a model to an ASP.NET Core MVC app --【在 asp.net core mvc 中添加一个model (模型)】
Adding a model to an ASP.NET Core MVC app在 asp.net core mvc 中添加一个model (模型)2017-3-30 8 分钟阅读时长 本文内容1. ...
- ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门
一.前言 1.本教程主要内容 ASP.NET Core 中间件介绍 通过自定义 ASP.NET Core 中间件实现请求验签 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SD ...
- ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
一.前言 1.本教程主要内容 ASP.NET Core MVC控制器简介 ASP.NET Core MVC控制器操作简介 ASP.NET Core MVC控制器操作简介返回类型简介 ASP.NET C ...
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
C#编译器优化那点事 使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...
随机推荐
- VB6之CRC32
翻译篇:http://www.cnblogs.com/duzouzhe/archive/2009/08/05/1539543.html Private Declare Function GetTick ...
- ps命令学习笔记
最近在看linux优化大师这本书,第2章祥细讲解了分析系统用的工具,这里把一些内容整理出来,以便加深印像. 当进行系统分析时,ps命令显示有关选择的活跃进程的信息.ps命令提供当前已存在的进程列表,和 ...
- Gulp安装流程、使用方法及cmd常用命令导览
Gulp安装流程.使用方法及CMD常用命令导览 来自前端小白的gulp及周边知识学习总结 一.名词介绍: Npm--node包管理工具 一开始我不理解,包管理工具是什么鬼.后来用到的gulp也好,gu ...
- Java 数据类型在实际开发中应用二枚举
在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的.在JDK1.5之前,人们用接口来描述这一种数据类型. 1. ...
- MySQL二进制日志备份和恢复详解
原文链接:http://www.showerlee.com/archives/681 ****经实践,该教程ok,特在此分享**** 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了 ...
- 制作Docker镜像
编写DockerFile 这个DockerFile是一个制作镜像的配方,用于描述这些文件,环境,和命令.在Linux.macOS的窗口终端中,或者windows的命令提示符下,执行下面的步骤,切记如果 ...
- win10下安装python2与python3以及pip共存
一 分别安装python2和python3 注意: 安装时记得勾选 Add Python.exe to Path 二 安装pip Python3最新版本有pip,无需安装 Python2: 下载pip ...
- PL/SQL入门随笔
PL/SQL(Procedure Language/SQL) PLSQL是Oracle对sql语言的过程化扩展:在SQL命令语言中增加了过程处理语句(如分支.循环等),使SQL语言具有过程处理能力.S ...
- sudo 和su
场景:在服务器上进行操作的时候通常不适用root用户,但是有时候执行某一些操作需要使用root权限... 1 su命令 使用su命令来切换用户,su是switch user切换用户的缩写. 可以是从普 ...
- MySQL学习笔记(六):索引
本文主要介绍MySQL 中关于索引的一些问题,例如:索引的作用:怎么创建索引:设计索引的原则:怎么优化索引等等. 一:索引概述 索引一般是通过排序,然后查找时可以二分查找,这一特点来达到加速查找的目的 ...