ASP.NET Core 介绍和项目解读
- 1. 前言
- 2. ASP.NET Core 簡介
- 2.1 什么是ASP.NET Core
- 2.2 ASP.NET Core的特點
- 2.3 ASP.NET Core 項目文件夾解讀
- 2.3.1 項目文件夾總覽
- 2.3.2 project.json和global.json
- 2.3.1 Properties——launchSettings.json
- 2.3.4 Startup.cs
- (1) 構(gòu)造函數(shù)
- (2) ConfigureServices
- (3) Configure
- 2.3.5 bundleconfig.json
- 2.3.6 wwwroot和bower.json
- 2.3.7 appsettings
- 3. 參考資料
?
1. 前言
作為一個.NET Web開發(fā)者,我最傷心的時候就是項目開發(fā)部署時面對Windows Server上貧瘠的解決方案,同樣是神器Nginx,Win上的Nginx便始終不如Linux上的,你或許會說“干嘛不用windows自帶的NLB呢”,那這就是我這個小鳥的從眾心理了,君不見Stack Overflow 2016最新架構(gòu)中,用的負載和緩存技術(shù)也都是采用在Linux上已經(jīng)成熟的解決方案嗎。沒辦法的時候找個適合的解決辦法是好事,有辦法的時候當(dāng)然要選擇最好的解決辦法。
所幸,.ASP.NET Core出現(xiàn)了,它順應(yīng)了開源大趨勢,擺脫了一直為人詬病的Win Server,以ASP.NET的跨平臺版本出現(xiàn)在了我們的眼前。暫且不論Benchmark中無聊的性能比較,也不探討將來是否能和JAVA,PHP Web應(yīng)用分庭抗禮,但是至少對我們.NET平臺開發(fā)者來說,我們多了一種開發(fā)方向,也多了一個嘗試前沿成熟技術(shù)的機會。所謂工欲善其事,必先利其器,我們先來看看ASP.NET Core是什么吧。
?
2. ASP.NET Core 簡介
2.1 什么是ASP.NET Core
ASP.NET Core 是一個新的開源和跨平臺的框架,用于構(gòu)建如 Web 應(yīng)用、物聯(lián)網(wǎng)(IoT)應(yīng)用和移動后端應(yīng)用等連接到互聯(lián)網(wǎng)的基于云的現(xiàn)代應(yīng)用程序。ASP.NET Core 應(yīng)用可運行于 .NET Core 和完整的 .NET Framework 之上。它整合了原來ASP.NET中的MVC和WebApi框架,你可以在 Windows、Mac 和 Linux 上跨平臺的開發(fā)和運行你的 ASP.NET Core 應(yīng)用。
2.2 ASP.NET Core的特點
ASP.NET Core 在架構(gòu)上做出了一些改變,這些改變會使它成為一個更為精簡并且模塊化的框架。在project.json文件中我們可以發(fā)現(xiàn),ASP.NET Core 不再基于 System.Web.dll(我們在project.json中見到的大部分都是Microsoft打頭) ,基于一系列顆粒化的,并且良好構(gòu)建的 NuGet 包,結(jié)合智能提示,它能夠讓你通過僅僅包含需要的 NuGet 包的方法來優(yōu)化你的應(yīng)用。一個更小的應(yīng)用程序接口通過“只為你需要的功能付出”(pay-for-what-you-use)的模型獲得的好處包括更可靠的安全性、簡化服務(wù)、改進性能和減少成本。
Tips:通過 Ctrl+F5(非調(diào)試模式)啟動這個應(yīng)用程序允許你進行代碼更改,保存文件,刷新瀏覽器,之后查看代碼改變。許多開發(fā)者更傾向于使用非調(diào)試模式來快速啟動應(yīng)用程序和查看變化。
以下列舉其他幾個改良特點
- 開源和跨平臺
- 滿足運行在.NET Core和.NET Framework上
- 中間件支持
- 性能優(yōu)化
- 無所不在的依賴注入
- 標準日志記錄
- 整合MVC和Web Api到一個框架中
- MVC 標簽幫助
- CLI工具
2.3 ASP.NET Core 項目文件夾解讀
ASP.NET Core 1.0 發(fā)布以來,相較于傳統(tǒng)項目編碼發(fā)布的行為,新項目中的操作已經(jīng)有了很大的變化,如解析依賴,選擇運行平臺和Runtime等等,就連項目結(jié)構(gòu)也有了比較大的改變,越來越多的配置選項由編輯器轉(zhuǎn)交給了開發(fā)者手動決定,這一點在新的各類配置文件中體現(xiàn)得尤為明顯,這里就來簡單解讀一下。
Tips:順便吐槽一下都Upadte3了,最新的.NET Core項目中,Visual操作中還是有好多明顯的bug呀。
2.3.1 項目文件夾總覽
?
2.3.2 project.json和global.json
?
project.json是.NET Core項目中最重要的一個配置文件,它類似于.NET Framework上的 .csrpoj文件(在下一版本中.NET Core將棄用該文件,轉(zhuǎn)而回歸.csrpoj)。所以這里還是搬運下張大大的博客吧,包括對global.json的解讀。?project.json 這葫蘆里賣的什么藥
2.3.1 Properties——launchSettings.json
?
顧名思義——啟動配置文件。launchSettings.json文件為一個ASP.NET Core應(yīng)用保存特有的配置標準,用于應(yīng)用的啟動準備工作,包括環(huán)境變量,開發(fā)端口等。在launchSettings.json文件中進行配置修改,和開發(fā)者右鍵項目——屬性中所提交的更改的效果是一樣的(目前右鍵屬性中的Property真是少得可憐),并且支持同步更新。
{"iisSettings": { #選擇以IIS Express啟動 "windowsAuthentication": false, #是否啟用windows身份驗證"anonymousAuthentication": true, #是否啟用匿名身份驗證 "iisExpress": { "applicationUrl": "http://localhost:24269/", #IIS Express隨機端口 "sslPort": 0 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "WebApplication": { #選擇本地自宿主啟動,詳見Program.cs文件。刪除該節(jié)點也將導(dǎo)致Visual Studio啟動選項缺失 "commandName": "Project", # "launchBrowser": true, "launchUrl": "http://localhost:5000", #本地自宿主端口 "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }2.3.4 Startup.cs
?
Startup.cs文件是ASP.NET Core的啟動入口文件,想必嘗試過OWIN開發(fā)的一定不會陌生。項目運行時,編譯器會在程序集中自動查找Startup.cs文件讀取啟動配置。除了構(gòu)造函數(shù)外,它可以定義Configure和ConfigureServices方法。
(1) 構(gòu)造函數(shù)
用來啟動配置文件Configuration
public Startup(IHostingEnvironment env){var builder = new ConfigurationBuilder().SetBasePath(env.ContentRootPath).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); if (env.IsDevelopment()) //讀取環(huán)境變量是否為Development,在launchSettings.json中定義 { // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately. builder.AddApplicationInsightsSettings(developerMode: true); } Configuration = builder.Build(); }(2) ConfigureServices
ConfigureServices 用來配置我們應(yīng)用程序中的各種服務(wù),它通過參數(shù)獲取一個IServiceCollection 實例并可選地返回 IServiceProvider。ConfigureServices 方法需要在 Configure 之前被調(diào)用。我們的Entity Framework服務(wù),或是開發(fā)者自定義的依賴注入(ASP.NET Core自帶的依賴注入也是無所不在),更多內(nèi)容請見官方文檔
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddApplicationInsightsTelemetry(Configuration); services.AddMvc(); }(3) Configure
Configure 方法用于處理我們程序中的各種中間件,這些中間件決定了我們的應(yīng)用程序?qū)⑷绾雾憫?yīng)每一個 HTTP 請求。它必須接收一個IApplicationBuilder參數(shù),我們可以手動補充IApplicationBuilder的Use擴展方法,將中間件加到Configure中,用于滿足我們的需求。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); app.UseApplicationInsightsRequestTelemetry(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseApplicationInsightsExceptionTelemetry(); app.UseStaticFiles(); app.UseMvc(routes => //MVC路由配置 { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }2.3.5 bundleconfig.json
?
bundleconfig.json是一個壓縮包的集合文件(這個不是很明白),這里有一篇bundleconfig.json specs,大意是它可以自動壓縮關(guān)聯(lián)文件用于項目中,如生成?<script>?和?<link>符號.
2.3.6 wwwroot和bower.json
?
wwwroot是一個存放靜態(tài)內(nèi)容的文件夾,存放了諸如css,js,img等文件。剛才提到新的ASP.NET Core使開發(fā)靈活度大大提高,文件配置也都是手動為主,所以既然有存放文件的wwwroot,那也有存放文件引用的bower.json:
{"name": "asp.net","private": true,"dependencies": { "bootstrap": "3.3.6", "jquery": "2.2.0", "jquery-validation": "1.14.0", "jquery-validation-unobtrusive": "3.2.6" } }bower.json記錄了項目需要的相關(guān)文件引用,我們可以在里面自由刪除增加需要的文件,如jquery.form.js,Bower配置管理器也會自動幫我們在github上下載相關(guān)文件,下載后的文件也將放在wwwroot文件夾中。這些改變在項目的“依賴項”上都能直觀查看。
Tips:每個項目中只能有一個bower.json配置文件,對于bower.json的詳細信息請參見Bower —— 管理你的客戶端依賴關(guān)系
2.3.7 appsettings
?
同樣是顧名思義——應(yīng)用配置,類似于.NET Framework上的Web.Config文件,開發(fā)者可以將系統(tǒng)參數(shù)通過鍵值對的方式寫在appsettings文件中(如程序的連接字符串),而Startup類中也在構(gòu)造器中通過如下代碼使得程序能夠識別該文件
var builder = new ConfigurationBuilder().SetBasePath(env.ContentRootPath).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables();3. 參考資料
- Unbundling scripts for debugging
- Visual Studio 2015 開發(fā) ASP.NET 5 有何變化?
- Docs ? Fundamentals ? Configuration
- BundlerMinifier
- project.json
- ASP.NET Core 中文文檔 中間件
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core 介绍和项目解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。