.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的架構體系,本系列相關文章:

  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)

在開始之前先集中回復前兩篇文章評論中大家比較關注的問題

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM