前面講過 .NET Core簡介及開發環境安裝,本章會講一講ASP.NET Core 2.0的專案結構,檢視完整的ASP.NET Core系列文章:https://www.cnblogs.com/zhangweizhong/category/1477144.html
新建專案
新建專案, 選擇.NET Core 有如下幾種型別可選, 分別是Console, ASP.NET Core 的空專案,Web API
我們選擇ASP.NET Core Web App(MVC), 沒有標註MVC的是採用Razor pages 的專案。
專案結構圖
新建的專案結構如下圖所示, 大體上和ASP.NET 的Framework版本差不多, Controller、Model, View就不介紹了。
大概介紹一下各個檔案是幹什麼用的,後面的文章會做詳細的研究。
launchSettings.json
顧名思義, 這是 json格式的啟動配置檔案,如下圖所示:
{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:9452", "sslPort": 44379 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "MyFirstCore": { "commandName": "Project", "launchBrowser": true, "applicationUrl": "https://localhost:5001;http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }
圖的上部分對應json中的profiles中定義的兩種配置,分別以IIS Express。基本上都是Web伺服器比如URL、身份認證以及SSL等配置。
wwwroot
wwwroot它包含了所有的"前端"的靜態檔案, css、image、JS以及一個名為lib的資料夾。
lib中預設內容是bootstrap和jquery。
在Startup中,會呼叫UseStaticFiles()方法, 將此目錄標記到網站根目錄。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { //..... app.UseStaticFiles(); //..... }
具體靜態檔案的路徑及相關自定義配置, 授權等後文詳細研究。
依賴項
整個專案依賴引用的類庫,這裡主要分兩部分, NuGet和SDK, 目前這兩部分下面都只有一項.
Nuget:
包含Microsoft.AspNetCore.App, 展開它看一下, 裡面MVC、Razor、EF以及SQLLite都要,
它包含了
- ASP.NET Core 團隊支援的所有包。
- Entity Framework Core 支援的所有包。
- ASP.NET Core 和 Entity Framework Core 使用的內部和第三方依賴關係。
這裡面是完整的AspNetCore的類庫,其實這些程式集不會隨著專案釋出一起出現在部署包中, 不止沒引用的, 包括引用的也不會. 這些已經存在於部署環境中了, 所以釋出包不會變大反而會變小, 不必擔心.
SDK:
SDk中包含了一項: Microsoft.NETCore.App, 它是.NET Core 的部分庫。 也就是 .NETCoreApp
框架。 它依賴於更小的 NETStandard.Library
。
相對於上面的Microsoft.AspNetCore.App, 它同樣是包含了一些程式集.但它似乎更"基礎"一些.
二者異同
Microsoft.AspNetCore.App中大部分都是Microsoft.開頭的一些程式集, 而Microsoft.NETCore.App中出現的大多數是我們熟悉的system.XXX的.
二者的關係就像ASP.NET相對於.NET, 此處是Asp.NetCore相對於.Net Core.
SDK同樣是一個大而全的集和, 在部署的時候, SDK中的引用依然不會出現在部署包中。
appsettings.json
這就是原來的framework版本的MVC的Web.config檔案,裡面會配置系統相關的所有的配置項,比如資料庫連線等。
預設情況appsettings.json只有對於log日誌的相關配置。這裡就不一一說明了。
{ "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" }
Program.cs
public class Program { public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>()
}
這裡是簡單的Main方法, 也就是應用的啟動的入口, 啟動後通過UseStartup<Startup>()指定下文的Startup啟動檔案進行啟動。
Startup.cs
Startup
類配置服務和應用程式的請求管道。這是.Net Core非常重要的地方, 包括載入配置, 通過依賴注入載入元件, 註冊路由等都在此處進行。
預設的程式碼中:
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. 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); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } }
如上圖所示, 預設情況下設定了兩種不同狀態下的錯誤頁, 指定靜態檔案並且設定了路由。
在這裡, 我們可以向管道中通過中介軟體的方式插入我們需要的工作內容。
比如我們還可以用app.UseAuthentication()來做身份驗證。
Startup
類非常重要,涉及的內容也非常多, 比如管道機制、路由註冊、身份認證等都需要專題研究。
小結
專案的結構大體就是這樣,主要功能介紹完了,後面會一個一個詳細介紹各自的功能和作用。