ASP.NET 5 簡介

oschina發表於2015-03-04

  ASP.NET 1.0 的預覽版釋出距今大約已經 15 年前了。由於數以百萬的開發者使用它構建和執行 web 應用,數年來我們新增並改進了它的無數功能。

  非常高興在今天釋出了我們正在研發中的 ASP.NET 的新版本,我們稱之為 ASP.NET 5。這次釋出是我們為 ASP.NET 所做的最重要的架構升級之一。而且在這次釋出中,我們讓 ASP.NET 更為精益,更加模組化,更好的跨平臺,並對雲平臺的支援做了進一步優化。ASP.NET 5 已經發布預覽版啦 !點選下載 Visual Studio 2015  社群版來體驗最新的 ASP.NET 5 吧!

  ASP.NET 5 是一個用於構建現代 web 應用的開源 web 框架,它支援 Windows, Linux 和 Mac 平臺。它包含 MVC6 框架,此框架將 MVC 和 Web API 整合成為一個單一的 web 程式設計框架。ASP.NET 5 還將成為 SignalR3 的基礎 ,SignalR3 可以讓你為“雲應用”新增實時功能。ASP.NET 5 是在 .NET Core 執行時(.NET Core runtime)上構建的,但是為了保持最大的相容性,它也可以執行在完全的 .NET Framework 框架之上。

  在 ASP.NET 5 中,我們做了大量的架構調整,使得核心 web 框架更加精簡(不再依賴 System.Web.dll)並且更加模組化(幾乎所有的功能都被實現為 NuGet 模組 - 你可以通過只選擇自己需要的模組來優化你的app)。ASP.NET 5 還包括下列改進:

  • 在 Windows, Mac 和 Linux 上構建和執行跨平臺 ASP.NET 應用

  • 構建在 .NET Core 之上,它支援真正的並行應用版本化(side-by-side app versioning)

  • 新的工具用於簡化現代 web 開發

  • 為 WebUI 和 Web APIs 提供了單一的技術棧

  • 為雲平臺準備的基於環境的配置方式

  • 整合了建立和使用 NuGet 包的功能

  • 原生支援依賴注入

  • 支援將應用部署在 iiS 或自己的 Web 服務上

  ASP.NET 5 仍是你所熟悉的那個 ASP.NET,並且它更適於現代 web 程式設計

 靈活的,跨平臺的執行時環境

  可以在兩種執行時環境下使用ASP.NET 5,這讓你在託管你的應用時有了更好的靈活性。這兩種執行時環境分別為:

  .NET Core –  一個新的,模組化的,可跨平臺的而且更加精簡的執行時。如果你決定使用 .NET Core,你將能夠體驗到以下它所帶來的激動人心的功能:

  1) 你可以將執行時環境連同你的應用一同部署,這意味著你的應用不再依賴你的託管環境的作業系統中所安裝的執行時版本。你的應用可以使用與其他應用不同的執行時版本。你可以隨時升級你的應用所需的執行時版本,這不會影響到其他的應用。同時,其他應用升級的時候,你仍可以使用舊版本的執行時。這讓應用開發和框架升級變得更加容易,並且能夠減少在同一個作業系統中執行的應用之間的相互影響。

  2) 你的應用僅僅依賴那些你需要的功能。因此你不必為那些與你的應用無關的功能而升級執行時或打補丁。 這也可以讓你節省一些測試和部署升級的時間,因為你不用花費精力在那些無關的功能上。

  3)  你的應用可以跨平臺執行啦。我們為 .NET Core 提供了跨平臺支援,支援 Windows, Linux 和 Mac OS X 系統。無論你用哪個作業系統開發或者你想將應用部署到那個作業系統上,你都可以使用 .NET。不過跨平臺版本的執行時目前還沒有釋出,我們正在 GitHub 上維護它,並計劃在不久的將來發布它的官方預覽版。

  .NET Framework –  .NET Core 的API 相對於完整的 .NET Framework 來說有一些限制。 所以你需要修改你現有的應用去適應 .NET Core。如果你不想升級你的應用,ASP.NET 5 也支援部署到完整的 .NET Framework (需要 4.2 或更高版本)上。這樣,你就可以使用完整的 .NET Framework API 了。你可以在不做修改的情況下,將已經存在的應用或類庫執行在這個執行時上。

  MVC 6-一個統一的程式設計模型

  MVC,Web,API 和 Web 網頁提供了互補的功能,當開發一個解決方案時,它們經常會一起被使用。然而,在以往的 asp.net 版本中,我們會分別來實現這些程式設計框架。因此它們包含有一些重複與不一致的地方。使用 mvc 6,我們可以把那些模型合併成一個簡單的程式設計模型。現在,你可以建立一個處理web ui 和無需在這些程式設計框架裡調和差異的資料業務的簡單 web 應用程式。首先,你也可以無縫地轉換一個在更強大的mvc應用程式裡開發web頁面的簡單的網站。

  你可以使用相同的 MVC 過濾器管道從同一個控制器恢復 Razor 檢視和內容協商的資料。

  為了統一現有框架我們增加了新特性來使服務端開發更加輕鬆,比如新的幫助標籤特性。 幫助Tag 可以讓你在檢視中通過簡單擴充套件標記語義來使用HTML輔助。

  因此你不應該這樣寫:

@Html.ValidationSummary(true, "", new { @class = "text-danger" })

<div class="form-group">

    @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })

    <div class="col-md-10">

        @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })

        @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" })

    </div>

</div>

  而應該這樣寫:

<div asp-validation-summary="ModelOnly" class="text-danger"></div>

<div class="form-group">

    <label asp-for="UserName" class="col-md-2 control-label"></label>

    <div class="col-md-10">

        <input asp-for="UserName" class="form-control" />

        <span asp-validation-for="UserName" class="text-danger"></span>

    </div>

</div>

  輔助Tag使你的檢視開發更加自然且提高可讀性。他們也使得通過新增標記來簡化HTML輔助輸出的自定製,因此你會充分利用 HTML 編輯器。

  如果需要更多建立MVC 6應用的例子,請看教程

 現代化的 Web 開發方法

  本週釋出的 ASP.NET 5 預覽版包含一些非常棒的開發功能,它們可以幫你更好的構建 Web 應用:

  動態開發

  在 Visual Studio 2015 中, 我們利用動態編譯為你提供了一個流線型的開發體驗。當你想要檢視某處修改的時候,你不必再編譯你的應用了。取而代之的是,你可以: (1) 修改程式碼, (2) 儲存修改,(3) 重新整理瀏覽器,(4)  檢視修改結果即可

image

  你會喜歡這樣的類似使用動態語言的開發體驗,同時又不會犧牲任何編譯型語言帶來的好處。

  你也可以使用任何其他的編輯器來開發你的 ASP.NET 5 工程。在 Visual Studio 使用者介面中的每個功能,都對應著一個可的命令列工具的命令。

  與流行的Web開發工具的整合(Bower, Grunt 和 Gulp)

  在 Visual Studio 2015中另一個令人興奮的特點是內建支援 Bower,GruntGulp —— 這些我們認為應該在每一個網頁開發者工具集中放著的流行開源工具。

  • Bower 是一個客戶端庫包管理器,包括 JavaScript 和 CSS 庫。

  • Grunt 和 Gulp 用於任務管理,幫您自動化Web開發工作流。您可以使用Grunt或Gulp像編譯LESS,coffeescript,或TypeScript檔案一樣,執行JSLint,或壓縮JavaScript檔案。

  Bower:如果要新增一個JavaScript庫到您的ASP.NET專案,直接新增在bower.json配置檔案:

image

  注意,Visual Studio 將給你一個可用的軟體包的 IntelliSense 提示。下一次開啟解決方案時,Visual Studio 自動恢復任何丟失的包,所以你不需要檢查包的原始碼控制。

  對於伺服器端的軟體包,您仍然可以使用 NuGet 包管理器。

  Grunt:在現代網路的發展,你會發現你需要管理大量的任務,僅僅是建立你的應用程式而言:編譯LESS,TypeScript,或 CoffeeScript 檔案,linting,JavaScript 壓縮,執行 JS 的單元測試,等等。每個團隊都有自己的一套要求,取決於所使用的特定工具。工作管理員更容易管理和協調這些任務。Visual Studio 2015 將支援最流行的兩種工作管理員,Grunt 和 Gulp。

  例如,如果你要用 Grunt 編譯 LESS。就去加入 grunt-contrib-less 包,這是一個第三方 Grunt 外掛。

image

  使用Visual Studio 2015中的新任務管理瀏覽器來繫結任務生成步驟(預生成,生成,清理,或解決方案開啟時)。

image

  這使得它非常易於實現在您的專案自動化常見任務,並讓其配合你工作,甚至是整個團隊專案。

  Simplified dependency management(簡化的依賴關係管理)

  在ASP.NET 5你可以新增NuGet包來管理依賴關係。您可以使用NuGet包管理器或簡單地編輯JSON檔案(project.json),其用於列出在你的專案中使用的NuGet包和版本。project.json的檔案很容易使用,你可以用任何文字編輯器編輯它,甚至當應用程式被部署到雲上也可以更新依賴關係。

  project.json 檔案看上去是這樣子的:

image

  在Visual Studio 2015,IntelliSense幫助您找到可用的可以新增依賴關係的NuGet包,。

image

  而且,IntelliSense甚至可以幫助列出可用版本:

image

 

  Cloud-ready configuration(配置雲準備)

  在ASP.NET 5,我們不再需要使用Web.config檔案來配置值。我們想讓它為你部署你的應用程式到雲更容易並讓程式自動讀取所處環境的正確配置值。新的系統允許您從各種源(如XML,JSON,或環境變數)請求命名值。你可以決定哪些格式以更好地配合工作。

  在startup.cs檔案中,你可以新增或刪除配置值的源.

image

  上面的程式碼段顯示了一個專案中,建立JSON檔案檢索環境變數和配置值。如果你需要可以修改程式碼指定其他源。在這個json檔案中你可以提供這些值。

image

  你所在的環境,比如Azure,可以設定環境變數的值,在應用部署之後將自動代替本地配置值。部署應用程式時可以不必擔心會發布測試值。

  依賴注入 (DI)

  在 ASP.NET 之前的版本,一些元件已經支援了依賴注入,如 MVC, WEB API 和 SignalR。但並不是以統一的整體解決方案的方式提供的。在 ASP.NET 5 中提供了一個新的依賴注入抽象層,它以統一的方式應用在整個 Web 棧中。當你需要用到某些服務(services)時,你可以在啟動時,在中介軟體(middleware)中,在過濾器(filters)中,在控制器(controllers)中,在模型繫結時以及任何管道的虛擬部件中訪問此服務。  ASP.NET 5 包含了一個用於引導系統的,極簡的依賴注入容器。你可以很容易的把它換成任何你想要的容器(如:Autofac, Ninject 等)。服務的範圍(scope)包括:單列(singleton),當前請求(request)或過渡(transient)。

  示例:為了演示在 ASP.NET MVC 6 中如何使用建構函式注入,首先要建立一個 ASP.NET 5 Starter Web 工程並新增一個簡單的服務:

using System;

namespace WebApplication1
{
    public class TimeService
    {
        public TimeService()
        {
            Ticks = DateTime.Now.Ticks.ToString();
        }
        public String Ticks { get; set; }
    }
}

  這個服務記錄建構函式被呼叫的時間。

  之後,在Startup類的ConfigureServices方法中,將這個時間服務註冊成為一個過渡服務(transient service):

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddTransient<TimeService>();
}

  然後, 將 HomeController 修改為使用建構函式注入的形式。並顯示 TimeService 物件被建立時的時間。

public class HomeController : Controller
{
    public TimeService TimeService { get; set; }

    public HomeController(TimeService timeService)
    {
        TimeService = timeService;
    }

    public IActionResult About()
    {

        ViewBag.Message = TimeService.Ticks + " From Controller";

        System.Threading.Thread.Sleep(1);

        return View();
    }

    // Code removed for brevity
}

  注意,此控制器沒有顯式的建立 TimeService。它是在控制器被初始化的時候注入進來的。

  在 MVC 6 中,你可以使用 [Activate] 特性(attribute)來實現屬性注入。你不僅可以在控制器中使用[Activate] 特性,還可以在過濾器和檢視元件中使用它。這意味著你可以簡化你的控制器,請看下面的程式碼:

public class HomeController : Controller
{

    [Activate]

    public TimeService TimeService { get; set; }

    // Code removed for brevity
}

  MVC 6 也支援在 Razor 檢視中使用依賴注入,這是通過 @inject 關鍵字實現的。在下面的程式碼中,我將時間服務直接注入到 about 檢視中,並且建立了一個 TimeSvc 屬性用來訪問它:

@using WebApplication23

@inject TimeService TimeSvc

<h3>@ViewBag.Message</h3>

<h3>

    @TimeSvc.Ticks From Razor

</h3>

  當你執行應用時,你可以看到對於控制器和檢視會產生不同的時間。

image

 更快的 HTTP 效能

  ASP.NET 5 引入一個新的模組化的 HTTP 請求管道,你可以只使用你需要的模組,而且這個管道不再依賴 System.Web。由於減少了開銷,你的應用將有更好的吞吐量,而且有一個更協調的 HTTP 棧。這個新的管道向 Katana 專案借鑑了許多,而且支援 OWIN.

  通過設定 Startup 類的 Configure 方法,你可以決定你要使用管道中的哪些元件。在Configure 方法中,可以指定在你的專案中使用哪些管道中介軟體。ASP.NET 5 已經包含了許多從 Katana 專案移植過來的中介軟體,像處理靜態檔案的中介軟體,處理驗證的中介軟體,用於診斷的中介軟體等。下面的程式碼展示瞭如何向你的專案中新增或去除管道元件。

public void Configure(IApplicationBuilder app)
{

    // Add static files to the request pipeline.

    app.UseStaticFiles();

    // Add cookie-based authentication to the request pipeline.

    app.UseIdentity();

    // Add MVC and routing to the request pipeline.

    app.UseMvc(routes =>

    {

    routes.MapRoute(

        name: "default",

        template: "{controller}/{action}/{id?}",

        defaults: new { controller = "Home", action = "Index" });

}); 

  你可以編寫你自己的中介軟體並把他們加入到管道中

 開源

  我們把ASP.NET 5作為一個開源專案公佈在GitHub上開發。你可以看到程式碼,看到修改,也可以下載程式碼,還可以提交變更。我們相信讓ASP.NET 5開源將會讓你更易於理解程式碼,理解我們預定的方向,並參與貢獻到工程中去。

image

 文件和指導

  若要開始使用ASP.NET 5你可以從ASP.NET的網站(http://asp.net/vnext)中找到文件和指導。下面的手冊將會指導你通過這些步驟建立你的第一個ASP.NET 5工程。

  一如閱讀這篇文章 可以在未來得到更多關於ASP.NET相關的內容並在Web開發中改進。

  希望這能幫到你,

  Scott

  原文地址:http://weblogs.asp.net/scottgu/introducing-asp-net-5

相關文章