.Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南

ASP.NET Core 2.0 发布日期:2017年8月14日html

ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET Core 2.0,提供新的Razor Pages项目模板。git

详细发布信息查看.NET Core 2.0.0发布说明文档github

最新版SDK下载:https://dot.net/corec#

ASP.NET Core 2.0提供一系列新功能使得Web应用开发、发布、部署和维护变得更加容易,框架性能获得进一步提高。服务器

对于.NET Core 2.0的发布介绍,围绕2.0的架构体系,本系列相关文章:架构

  1. .Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南(已发布)
  2. .Net Core 2.0 生态(2).NET Core 2.0 特性介绍和使用指南(已发布)
  3. .Net Core 2.0 生态(3)ASP.NET Core 2.0 特性介绍和使用指南(已发布)
  4. .Net Core 2.0 生态(4)Entity Framework Core 2.0 特性介绍和使用指南(已发布)

前言:答读者问(time by:2017.8.19)

在开始以前先集中回复前两篇文章评论中你们比较关注的问题mvc

  • 问题1:工具的更新问题
    问题by @軒轅劍:有没单独升级到15.3的更新啊?
    答案by @yyww:下载新版本的安装程序,1M多,会自动更新的

VS2017安装程序通过重构变成模块化安装,因此对于15.3版本的更新是增量更新,下载最新的安装程序,会自动检测。app

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的平台有:ide

  • .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提供的一系列新功能提供编写应用程序的新方法,简化了应用程序在生产环境的管理和维护。

相关文章
相关标签/搜索