1. 程式人生 > >通過幾個Hello World感受.NET Core全新的開發體驗

通過幾個Hello World感受.NET Core全新的開發體驗

2016年6月27日,這是一個特殊的日子,微軟全新的.NET開發平臺.NET Core的RTM版本正式釋出。我個人將.NET Core的核心特性歸結為三點,它們的首字母組成一個非常好記的簡稱——COM,分別代表的含義Cross-Platform、Open-Source和Modularization。開發.NET Core應用的方式與之前具有非常大的變化,對於那些尚未體驗過.NET Core的朋友,我希望通過本篇文章建立的這j幾個Hello World應用可以很容易地帶你們快速入門。

首先我們會介紹如何構建.NET Core應用的開發環境。在這之後,我們會利用dotnet new命令列建立一個控制檯型別的Hello World應用,這個簡單的應用時後續幾個Hello World應用的雛形,後者都是通過它改變而成。我們做的第一個改變是將它變成一個ASP.NET Core應用,並採用Self-Host的方式將它寄宿於這個控制檯應用中。這個ASP.NET Core應用被進一步改造成一個ASP.NET Core MVC應用,我們會自行定義Controller和View已經路由。

目錄
一、構建開發環境
二、執行dotnet new命令建立一個控制檯應用
三、將應用修改成一個ASP.NET Core應用
四、自行指定監聽地址
五、將應用修改成一個ASP.NET Core MVC應用
六、新增View

一、構建開發環境

根據自身的作業系統型別安裝和執行環境.NET Core SDK、IDE和相關的工具

二、執行dotnet new命令建立一個控制檯應用

我們直接啟動命令列工具,為建立的Hello World應用建立一個根目錄(%USERPROFILE% projects/helloworld)。在將該目錄設定為當前目錄後,我們按照如下的方式執行“dotnet new”命令。原始碼下載:

netcore.helloworld1

image

dotnet new命令會為我們建立一個由如下兩個檔案組成的控制檯應用。

image

作為程式入口的Main方法定義在Program.cs檔案中,如下所示的程式碼片段體現了該檔案的整體定義,我們可以看到Main方法僅僅是在控制檯上打印出“Hello World”字樣而已。

   1: using System;
   2: namespace ConsoleApplication
   3: {
   4:     public class Program
   5:     {
   6:         public static void Main(string[] args)
   7:         {
   8:             Console.WriteLine("Hello World!");
   9:         }
  10:     }
  11: }

我們建立的控制檯專案直接對映為一個目錄,專案自身的設定定義在project.json這個檔案中,該檔案的整體定義反應在如下所示的程式碼片段中。整個檔案由四個節點組成,其中version和buildOptions用來定義目標專案的版本和編譯選項。dependencies在用來存放針對NuGet包的依賴。我們建立的專案可以針對一個或者多個Framework(比如我們希望建立的可以同時在.NET Framework和.NET Core上執行),支援的Framework定義在frameworks節點下。如果添加了多個Framework,並不是說最終生成的應用可以同時在這些Framework中執行,而是說原始檔在編譯的時候會針對這些Framework生成對應的程式集。

   1: {
   2:   "version": "1.0.0-*",
   3:   "buildOptions": {
   4:     "debugType": "portable",
   5:     "emitEntryPoint": true
   6:   },
   7:   "dependencies": {},
   8:   "frameworks": {
   9:     "netcoreapp1.0": {
  10:       "dependencies": {
  11:         "Microsoft.NETCore.App": {
  12:           "type": "platform",
  13:           "version": "1.0.0"
  14:         }
  15:       },
  16:       "imports": "dnxcore50"
  17:     }
  18:   }
  19: }

對於傳統的.NET專案來說,如果我們需要呼叫某個API,需要新增所在程式集的引用。對於.NET Core來說,所有使用到的程式集都被打包成一個NuGet包,所以針對程式集的直接依賴轉變成針對某個NuGet包的依賴。針對NuGet的依賴主要有兩種型別,一種是針對所有Framework的,它們會直接定義在dependencies節點下,另一種則是針對某個具體Framework的,定義的定義為當前Framework節點下的dependencies子節點。我們定義在Project.json中的設定的NuGet包可能尚未在本地安裝,我們可以執行dotnet restore命令獲取並在本地安裝所有需要的NuGet包。一旦完成了針對NuGet包的回覆操作,我們就可以直接執行dotnet run命令來啟動應用。在這期間,我們的應用實際上會經歷一個編譯的過程,我們也可以執行dotnet build命令對其實施編譯。如下面的程式碼片段所示,我們分別先後執行restore、build和run三個命令,目標程式最終得以執行。

image

三、將應用修改成一個ASP.NET Core應用

接下來我們將這個控制檯應用改造成一個最簡單的ASP.NET Core應用。IDE的選擇,我們可以使用VS 2015,也可以使用VS Code,假設我們選擇前者。我們以開啟專案(File->Open->Project/Solution)的方式開啟project.json後,相當於開啟了整個控制檯專案。ASP.NET Core的核心管道定義在NuGet包“Microsoft.AspNetCore.Hosting”中,以Self-Host的方式寄宿ASP.NET Core應用還需要一個Server,我們選擇的是定義在“Microsoft.AspNetCore.Server.Kestrel”這個NuGet包中的KestrelServer,所以我們第一步需要做的就是在project.json中新增針對這兩個NuGet包的依賴。原始碼下載:netcore.helloworld2

   1: {
   2:   "version": "1.0.0-*",
   3:   "buildOptions": {
   4:     "debugType": "portable",
   5:     "emitEntryPoint": true
   6:   },
   7:   "dependencies": {
   8:      "Microsoft.AspNetCore.Hosting":"1.0.0",
   9:      "Microsoft.AspNetCore.Server.Kestrel":"1.0.0"
  10:   },
  11:   "frameworks": {
  12:     "netcoreapp1.0": {
  13:       "dependencies": {
  14:         "Microsoft.NETCore.App": {
  15:           "type": "platform",
  16:           "version": "1.0.0"
  17:         }
  18:       },
  19:       "imports": "dnxcore50"
  20:     }
  21:   }
  22: }

ASP.NET Core應用的寄宿依賴於一個WebHost物件,後者則通過對應的工廠WebHostBuilder建立,為此我們將針對WebHost的建立定義在作為入口點的Main方法中。如下面的程式碼片段所示,我們建立了一個WebHostBuilder物件,在呼叫其Build方法建立WebHost物件之前,我們先後呼叫了前者的UseKestrel和UseStartup方法。前者的目的在於註冊上面提及的這個叫做KestrelServer的Server,後者則註冊一個啟動型別Startup。WeHost的Run方法一旦呼叫,意味著ASP.NET Core應用被啟動。

   1: using System;
   2: using Microsoft.AspNetCore.Hosting;
   3: using Microsoft.AspNetCore.Builder;
   4: using Microsoft.AspNetCore.Http;
   5:  
   6: namespace ConsoleApplication
   7: {
   8:     public class Program
   9:     {
  10:         public static void Main(string[] args)
  11:         {
  12:             new WebHostBuilder()
  13:             .UseKestrel()
  14:             .UseStartup<Startup>()
  15:             .Build()
  16:             .Run();
  17:         }
  18:     }
  19: }

ASP.NET Core應用的背後是一個由Server和Middleware構成的管道,Server實現針對請求的監聽、接收和響應,而註冊的Middleware則負責對請求進行處理。WebHostBuilder的UseKestrel方法為管道註冊了必不可少Server,Middleware的註冊在實現在由UseStartup方法註冊的啟動型別中。如下所示的是我們註冊的Startup型別的定義,我們在Configure方法中呼叫ApplicationBuilder的擴充套件方法Run註冊了唯一的Middleware,它對請求的處理邏輯簡單而直接——直接響應一個“Hello World”字串。

   1: using System;
   2: using Microsoft.AspNetCore.Hosting;
   3: using Microsoft.AspNetCore.Builder;
   4: using Microsoft.AspNetCore.Http;
   5:  
   6: namespace ConsoleApplication
   7: {    
   8:     public class Startup
   9:     {
  10:         public void Configure(IApplicationBuilder app)
  11:         {
  12:             app.Run(context=>context.Response.WriteAsync("Hello World"));
  13:             
  14:         }
  15:         
  16:     }
  17: }

我們同樣按照上面的方式執行dotnet restore和dotnet run命令,ASP.NET Core應用將被啟動。

image

上控制檯上的輸出我們可以看出,ASP.NET Core啟動後會繫結到預設的地址“http://localhost:5000/”來監聽請求,所以我們可以利用瀏覽器向這個地址傳送請求,應用處理請求後會按照如下的形式響應由註冊的Middleware寫入的“Hello World”。

image

四、自行指定監聽地址

我們在利用WebHostBuilder建立WebHost,以及利用後者啟動ASP.NET Core應用的整個過程中並沒有顯式指定Server監聽的地址,在此情況下預設的監聽地址“http://localhost:5000/”會被使用。我們也可以自行指定這個監聽地址,該地址可以通過呼叫WebHostBuilder的擴充套件方法UseUrls來指定。如下面的程式碼片段所示,我們在利用WebHostBuilder建立WebHost之前呼叫UseUrls方法註冊了兩個監聽地址“http://localhost:8888/“和“http://localhost:9999/”。原始碼下載:netcore.helloworld3

   1: using System;
   2: using Microsoft.AspNetCore.Hosting;
   3: using Microsoft.AspNetCore.Builder;
   4: using Microsoft.AspNetCore.Http;
   5:  
   6: namespace ConsoleApplication
   7: {
   8:     public class Program
   9:     {
  10:         public static void Main(string[] args)
  11:         {
  12:             new WebHostBuilder()
  13:             .UseKestrel()
  14:             .UseStartup<Startup>()
  15:             .UseUrls("http://localhost:8888/", "http://localhost:9999/")
  16:             .Build()
            
           

相關推薦

通過Hello World感受.NET Core全新開發體驗

2016年6月27日,這是一個特殊的日子,微軟全新的.NET開發平臺.NET Core的RTM版本正式釋出。我個人將.NET Core的核心特性歸結為三點,它們的首字母組成一個非常好記的簡稱——COM,分別代表的含義Cross-Platform、Open-Source和Modularization。開發.NE

解決拿蛋問題的時候,通過shell腳本運算速度對比,體會了算法和編程優化的重要性

拿蛋問題 shell腳本運算速度對比 算法和編程優化 前幾天,一位同學在群裏提出一個拿蛋的問題,原題如下:有一筐雞蛋,1個1個拿,正好拿完2個2個拿,正好拿完3個3個拿,正好拿完4個4個拿,剩下2個5個5個拿,剩下4個6個6個拿,正好拿完7個7個拿,剩下5個8個8個拿,剩下2個9個9個拿,正好拿完

通過栗子認識 PHP 閉包

通過幾個栗子認識PHP閉包 一、栗子1 用作於回撥 二、栗子2 用作於變數賦值 三、栗子3 從父作用域繼承變數 四、栗子4的前提條件,簡單理解call_user_func_array()和call_user_func()方法 1. call

新手指南:通過 Docker 在 Linux 上託管 .NET Core

本文導航 -安裝02% -原始碼03% -轉換到 .NET CORE 1.004% -通過 Docker 執行15%

Centos7通過dockerfile執行hello world

安裝docker 1.切換到root使用者下 # sudo su - 2.開始安裝docker # yum install docker.io此時會開始安裝docker 3.查詢docker的版本 # docker -v 4.啟動docker服

支援多版本的ASP.NET Core Web API

基本配置及說明 版本控制有助於及時推出功能,而不會破壞現有系統。 它還可以幫助為選定的客戶提供額外的功能。 API版本可以通過不同的方式完成,例如在URL中新增版本或通過自定義標頭和通過Accept-Header作為查詢字串引數。 在這篇文章中,我們來看看如何支援多版本的A

角度學習ASP.NET Core中介軟體

## 中介軟體真面目 關於ASP.NET Core中介軟體是啥,簡單一句話描述就是:用來處理HTTP請求和響應的一段邏輯,並且可以決定是否把請求傳遞到`管道`中的下一個中介軟體! 上面只是概念上的一種文字描述,那問題來了,中介軟體在程式中到底是個啥:question: 一切還是從`IApplicatio

硬碟網盤U盤全部可以丟掉了,這個裝置可以讓你享受隨身帶著T的感受

## 前言 有小夥伴問我,你怎麼老寫技術類文章,能不能寫點別的。 其實我興趣挺廣泛的,早年還有機會做個遊戲博主,可惜最近2年金盆洗手了。戒了手遊,ns和ps4都在吃灰。能完整玩完的遊戲屈指可數。但是對於折騰裝備,卻越來越熱衷了。 最近就來分享下我最近2個月玩NAS的心得,打算做一個系列。這篇主要

雲端計算之路-出海記-小目標:Hello World from .NET 5.0 on AWS

品嚐過船上的免費晚餐,眺望著 aws 上搭建部落格園海外站的巨集偉目標,琢磨著眼前可以實現的小目標,不由自主地在螢幕上敲出了 —— "Hello World!",就從這個最簡單樸實的小目標開始吧 —— 用 ASP.NET Core on .NET 5.0 在 A

.NET CORE MVC網站體驗

vscode sco ima .net core dir nload back tle download 安裝SDKhttps://www.microsoft.com/net/download/core運行命令行工具mkdir coremvccd coremvcdotnet

史坑:.Net core 2.0 體驗

core images .cn nbsp 錯誤 ges 一個 logs http Net core 2.0 生成的包文件更少,大小也更小了。同一個項目 1.1 是約21M;2.0是 2.4M. 愉快地使用一天之後。VS2017 突然識別不到 .NET core 2.0

Consul在.Net Core中初體驗

use 機器 dns href register info 127.0.0.1 出現 守護進程 簡介 在閱讀本文前我想您應該對微服務架構有一個基本的或者模糊的了解 Consul是一個服務管理軟件,它其實有很多組件,包括服務發現配置共享鍵值對存儲等 本文主要講解Consul的

.Net Core SignalR 初體驗

前言   Asp.Net SignalR已經出來很久了,但是一直沒有靜下心來好好看看。昨天花了幾個小時的時間看了下。首先借鑑了官方文件,如何搭建一個SignalR的Demo。   所以為了快速搭建和體驗.Net Core版本的SignalR,我選擇了下載官方的Demo和參考官方給的教程。所以具體的搭建過程

使用.NET Core 2開發部署Angular 5專案

目錄 介紹 背景 先決條件 開發設定 Angular 5設定 調整 部署的最後步驟 在Visual Studio 2017中使用.NET Core 2設定Angular 5以進行開發和部署的步驟。 介紹 在使用Visual Studio 2017建立和

ASP.NET Core 企業開發架構概述

企業開發框架包括垂直方向架構和水平方向架構。垂直方向架構是指一個應用程式的由下到上疊加多層的架構,同時這樣的程式又叫整體式程式。水平方向架構是指將大應用分成若干小的應用實現系統功能的架構,同時這樣的系統叫做分散式系統。在架構上java和.net世界都有優秀的框架支援構建垂直和水平方向架構。ASP.Net

Asp.Net Core 程序開發技巧匯總

amp 進行 rim expr eight 符號 book orm basedir 使用Sqlite數據庫 創建項目 Asp.Net Core Web應用程序 Web應用程序 ASP.NET Core 2.2 NuGet管理,添加Sqlite數據庫支持 Microsoft.

asp net core 跨平臺初體驗

安裝 net core 執行環境:ubuntu 16.04 LTS 1.新增 apt 源      依次執行三條命令      sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net

在windows下的inux軟體開發系統

      MinGW是windows版本的gcc集合,不需要依賴中間層。       MSYS是小型的linux的環境的模擬,可以與MinGW結合來模擬linux環境下使用MinGW的gcc。       Cygwin是功能強大的linux環境,由於有cygwin1.dl

比較好的IT站和開發庫官網

1、IT技術、專案類網站 (1)首推CodeProject,一個國外的IT網站,官網地址為:http://www.codeproject.com,這個網站為程式開發者提供了很好的程式碼示例以及講解,不過需要英文基礎紮實才好。 關於IT業前沿資訊 2、學習C++、VC

使用Asp.Net Core MVC 開發項目實踐[第四篇:基於EF Core的擴展2]

拉姆達表達式 接下來 col ron private cte 使用 下載 成員 上篇我們說到了基於EFCore的基礎擴展,這篇我們講解下基於實體結合拉姆達表達式的自定義更新以及刪除數據. 先說下原理:其實通過實體以及拉姆達表達式生成SQL語句去執行 第一種更新擴展: