ASP.NET Core系列(二):創建第一個.Net Core 項目


前面講過 .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類非常重要,涉及的內容也非常多, 比如管道機制、路由注冊、身份認證等都需要專題研究。

 

小結

項目的結構大體就是這樣,主要功能介紹完了,后面會一個一個詳細介紹各自的功能和作用。

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM