前面讲过 .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 类非常重要, 涉及的内容也非常多, 比如管道机制, 路由注册, 身份认证等都需要专题研究.
小结
项目的结构大体就是这样, 主要功能介绍完了, 后面会一个一个详细介绍各自的功能和作用.
来源: https://www.cnblogs.com/zhangweizhong/p/11211340.html