ASP.NETCore學習記錄(一)

ASP.NETCore學習記錄(一)

0. ASP.NETCore 介紹

ASP.NETCore是一個新的開源和跨平臺的框架,用於構建如Web應用、物聯網(IoT)應用和移動後端應用等鏈接到互聯網的基於雲的現代應用程序。ASP.NET Core應用可運行於.NET Core和完整的.NET Framework之上。構建它的目的是爲那些部署在雲端或者內部運行的應用提 供一個優化的開發框架。它由最小開銷的模塊化的組件構成,所以在構建解決方案的同時能夠 保持靈活性。咱們能夠在Windows、Mac和Linux上跨平臺開發和運行本身的ASP.NET Core 應用。html

ASP.NETCore 開源在 GitHub 上。ASP.NET Core有一些架構上的改變,這些改變使得它成爲一個更爲精簡而且模塊化的框架。ASP.NET Core再也不基於System.Web.dll。當前它基於一系列顆粒化的,而且有良好構建的 NuGet包。這一特色可以讓你經過僅僅包含須要的NuGet包的方法來優化你的應用。一個更小 的應用程序接口經過「只爲你須要的功能付出」(pay-for-what-you-use)模型得到的好處包括: 可靠的安全性、簡化服務、改進性能和減小成本。git

經過ASP.NET Core能夠得到的改進以下:github

  • 一個統一的方式用於構建Web UI和Web APIs。
  • 集成現代的客戶端開發框架和開發流程。
  • 一個適用於雲的,基於環境的配置系統。
  • 內置的依賴注入。
  • 新型的、輕量級的、模塊化HTTP請求管道。
  • 運行於IIS或者自宿主(self_host)於你本身的進程的能力。
  • 基於支持真正的side-by-side應用程序版本化的.NET Core構建。
  • 徹底以NuGet包的形式發佈。
  • 新的用於簡化現代Web開發的工具。
  • 能夠在Windows、Mac和Linux上構建和運行跨平臺的ASP.NET應用。
  • 開源而且重視社區。

1. ASP.NETCore 應用

使用VS 2017新建一個Web應用,打開VS 2017建立一個新的解決方案,在解決方案中新建一個項目,在添加新項目窗口中選擇 .NET Core,選擇ASP.NETCore Web應用程序,以下圖所示:web

新建 ASP.NET Core Application
新建 ASP.NET Core Application

 

這裏的實例咱們使用 Web Application (MVC) 框架版本爲 .NET Core 2.1 以下圖所示:後端

選擇ASP.NET Core 項目模板
選擇ASP.NET Core 項目模板

 

一個ASP.NET Core 應用其實就是在 Program 類的 Main方法調用 WebHost.CreateDefaultBuilder方法,建立了一個默認的Web應用程序宿主(Web服務器)。相比於.NET Core 1.0 在.NET Core 2.x 少了許多配置,新的方式已經隱藏了不少細節, 在WebHost.CreateDefaultBuilder這個函數內部幫助咱們完成了大部分的配置工做(啓用了Web服務器 UseKestrel、配置內容根目錄 UseContentRoot等)。安全

在下面的代碼中,Main方法建立了一個默認的Web服務器,並指定Startup類(UseStartup)的方法。下面會講解更多關於 Startup 的內容。BuildRun 方法構建了用於宿主應用程序的 IWebHost,而後啓動它來監聽傳入的HTTP請求。服務器

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace WebApplicationDome
{
    public class Program {
        public static void Main(string[] args) {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
}

2. 服務器

ASP.NET Core 託管模式並不直接監聽請求,而是依賴於一個 HTTP Server 實現來轉發請求到應用程序。這個被轉發的請求會以一組 feature 接口的形式被包裝,而後被應用程序組合到一個 HttpContext 中去。ASP.NET Core 包含了一個託管的跨平臺Web服務器:Kestrel,它每每會 被運行在一個如 IIS 或者 Nginx 的生產 Web 服務器以後。cookie


3. Startup.cs

WebHostBuilderExtensions 的 UseStartup 方法爲你的應用指定了 Startup 類。
Startup類是應用程序的入口(entrypoint),這個類能夠用來定義請求處理管道和配置應用需耍的服務。架構

Startup 類必須是公開的 (public)。
Startup類可以選擇性地在構造函數中接受經過依賴注入提供的依賴項。
Startup類必須定義 Configure方法,可選擇定義一個 ConfigureServices方法,這些方法將在應用程序啓動時被調用:app

public class Startup {
    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services) {
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
    }
}

在ASP.NETCore中,Startup類提供了應用程序的入口,並且在全部應用程序都有Startup類。可能會存在特定環境的啓動類和方法,但不管如何,Startup 類都將被充當爲應用程序的啓動點。

1). ConfigureServices方法

ConfigureServices 方法用於定義應用程序所使用的服務。經過依賴注入可將服務加入服務容器(IoC容器),使其在應用程序中可用。正如 Startup 類能將指定的依賴項做爲其方法參數——而不足硬編碼(hard-coding)來實例化特定實現,在應用程序中的其餘類均可以作到這一點。經過在 IServiceCollection 上使用擴展方法來包裝須要大量配置細節的 ConfigureServices。在下面的例子(使用了默認的Web應用程序MVC模板)中看到 ConfigureServices 方法中有個 AddMvc 的擴展方法被用於設罝應用程序可以使用MVC服務:

public void ConfigureServices(IServiceCollection services) {
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

2). Configure方法

Configure方法用於指定ASP.NET應用程序將如何響應每個HTTP請求。簡單來講,你能夠配置每一個請求都接收相同的響應。然而,大多數實際的應用程序都須要比這更多的功能。更復雜的管道配置能夠封裝於中間件(middleware)中,並經過擴展方法添加到 lApplicationBuilder 上。Configure 方法必須接受一個 IApplicationBuilder 參數。一些額外服務,好比 IHostingEnvironmentILoggerFactory 也能夠被指定,而且在它們可用的狀況下,這些服務將會被服務器注入進來。在下面的例子(來源於默認的Web應用程序MVC站點模板),多個擴展方法被用於配罝管道,以支持錯誤頁、靜態文件、ASP.NET MVC路由。

public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection(); // 添加HTTPS重定向中間件
    app.UseStaticFiles();    // 添加靜態文件中間件
    app.UseCookiePolicy();   // 使用Cookie策略中間件

    app.UseMvc(routes =>    // 使用MVC中間件
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

每一個 Use 擴展方法都會把一箇中間件加入請求管道中。例如,UseMvc擴展方法增長路由中間件請求管道,並配置MVC爲默認處理程序。

在下一節中間件,將會介紹更多有關中間件的信息,包括使用 IApplicationBuilder 來定義請求管道,建立本身的自定義中間件。

3). 在啓動時服務可用

ASP.NETCore在應用程序啓動期間提供了一些應用服務和對象。使用這些服務的方法很是簡單,只要在 Startup 類的構造函數中包含合適的接口,或是在它的 Configure方法、ConfigureServices方法中包含合適的接口便可。下面定義了在Startup類中對每一個方法可用的服務。框架服務和對象包括以下內容:

①. IApplicationBuilder
被用於構建應用程序的請求管道。只能在 Startup 中的 Configure方法裏使用。

②. IApplicationEnvironment
提供了訪問應用程序屬性,相似於ApplicationNamc、ApplicationVersion以及 ApplicationBasePath。能夠在Startup的構造函數和Configure方法中使用。

③. IHostingEnvironment
提供了當前的EnvironmentName、WebRootPath以及Web根文件提供者。能夠在Startup的構造函數和Configure方法中使用。

④. LoggerFactory
提供了建立日誌的機制。能夠在 Startup的構造函數或 Configure 方法中使用,更多請閱讀 Logging。

⑤. IServiceCollection
當前容器中各服務的配置集合。只能在 ConfigureServices 方法中使用。只有在 ConfigureServices方法中配罝後,此服務在應用程序中才變得可用。

看看Startup類中按它們被調用排序的每個方法,下面的服務可做爲參數:

  • Startup構造函數: IApplicationEnvironment, IHostingEnvironment, ILoggerFactory
  • ConfigureServiccs方法: IServiccCollcction
  • Configure方法: IApplicationBuilder, IApplicationEnvironment, IHostingEnvironment, ILoggerFactory

4. 服務

服務是應用程序中用於通用調用的組件。服務經過依賴注入獲取並使用。ASP.NET Core內置了一個簡單的控制反轉(IoC)容器,它默認支持構造器注入,而且能夠方便地替換成你本身選用的 IoC 容器。因爲它的鬆耦合特性,依賴注入(DI)使服務在整個應用中均可以使用。例如,Logging 在整個應用中均可用。


5. 內容根目錄

內容根目錄是應用程序所用到的全部內容的根路徑,好比它的 views 和 web內容。默認狀況下,內容根目錄是與宿主應用的可執行程序的應用根目錄相同:其餘位罝能夠經過 WebHostBuilder 來設置。


6. Web根目錄

應用程序的 Web根目錄是項目中相似於 CSS、JS和圖片文件公開、靜態的資源的目錄。靜態文件中間件將默認只讀取Web根目錄和其子目錄中的文件。Web根目錄默認爲[content root]/wwwroot。(能夠經過WebHostBuilder來指定另一個地址)


7. 配置

ASP.NET Core使用了一個新的配置模型,用來處理簡單的鍵值對。新的配置模型不是基於 System.Configuration 或者 web.config;相反,它足一個有序拉取數據的配置 providers。內置的構造提供支持多種不一樣的文件格式,如 XML、JSON、INI和用於支持基於環境的配置環境變量,也能夠本身編寫實現自定義的配罝providers。


8. 環境

ASP.NET Core 支持在多個環境中管理應用程序行爲,如開發Development,預演staging和生產Production,是ASP.NET Core中的第一級概念,並且它可使用環境變量來配置。

將在後面記錄中詳細介紹以上知識點。


參考資料

《ASP.NET Core 跨平臺開發從入門到實踐》

相關文章
相關標籤/搜索