.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提供的一系列新功能提供編寫應用程序的新方法,簡化了應用程序在生產環境的管理和維護。

相關文章
相關標籤/搜索