asp.net core 3.0 学习笔记01
2022.04.29~05.02
本篇为基本入门,介绍一些基本概念和配置,对asp.net core建立一个基本的概念。
1.创建一个Web项目
- 本质上来说asp.net core web 项目其实就是一个控制台程序
public class Program
{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();//webBuilder.UseKestrel();});
}
2.Startup文件
- Startup是我们程序的启动配置信息类
- 在Startup中会先执行 ConfigureServices() 再执行 Configure()
ConfigureServices方法
- 这个方法主要是用来配置程序需要注入的服务
- .net core 大量使用依赖注入的方式来使用我们的服务,原生有三种注入的方法。
- services.AddTransient() 每次调用都会生成一个新的实例
- services.AddScoped() 每次web请求中只生成一次实例
- services.AddSingleton() 服务启动后只创建一次实例(推荐)
- 依赖注入的优点
- 代码解耦,调用方和服务没有强依赖(有利于单元测试)
- 调用方不需要了解具体的服务类,调用方注入的是接口,不管实现
- 系统会帮我们管理注入服务的生命周期
public void ConfigureServices(IServiceCollection services)
{//包含很多功能一般不用//services.AddMvc();//项目中使用razor视图引擎//services.AddRazorPages();//项目中使用控制器和视图,传统mvc//services.AddControllersWithViews();//项目只使用控制器,webapiservices.AddControllers();//注册自己的服务接口,.net core 提供三种接口依赖注入的方法 //services.AddTransient<IUserSerivce, UserService>();//每次调用都会生成一个新的实例//services.AddScoped<IUserSerivce, UserService>();//每次web请求中只生成一次实例services.AddSingleton<IUserSerivce, UserService>();//服务启动后只创建一次实例(一般使用)//依赖注入 DI//1.controller 解耦,没有强依赖,不依赖服务本身 2.controller 不需要了解具体服务类 3. 不需要管理服务类的生命周期
}
Configure方法
- 这个方法主要是配置请求管道中的中间件。客户端(浏览器)在请求我们的web程序的时候,需要通过一个管道,这个管道里面配置了一些处理这个web请求的中间件,经过处理后最后返回给客户端。
- 管道中的中间件是有先后顺序的
- 需要了解一些常用内置中间件的作用
- UseHttpsRedirection() 把所有的http请求专为https
- UseStaticFiles() 启用静态文件访问,默认的静态文件目录为wwwwroot目录,一般我们把图片、js、css这些放在这个目录下。如果不添加这个中间件,将访问不到静态文件。
- UseRouting() 路由中间件,3.0版本单独分离出来了。
- UseAuthorization() 认证授权中间件,一般用于登陆。
- UseEndpoints() 端点中间件,这个一般在最后,在前面的中间件处理完之后,最终要进入到程序的哪里,我们在这里可以配置路由表。
//把http请求都转成httpsapp.UseHttpsRedirection();//静态文件中间件,不设置客户端访问不到js css这些静态文件//测试访问 https://localhost:44387/images/1.jpgapp.UseStaticFiles();//路由中间件app.UseRouting();//授权认证中间件,这个要放在UseEndpoints之前,因为要先进行验证权限app.UseAuthorization();//端点中间件app.UseEndpoints(endpoints =>{//endpoints.MapRazorPages();//路由表endpoints.MapControllerRoute(name: "default",pattern: "{controller:Home}/{action=Index}/{id?}");//测试//endpoints.MapGet(pattern: "/error", requestDelegate: async context =>//{// await context.Response.WriteAsync("hello world");//});});
- 针对不同的环境可以进行单独的配置,如果开发环境和生产环境使用不同配置代码
- 方法内的配置
- 方法级别的配置
- 类级别的配置(这种不多讨论)
//方法内的根据不同的环境的不同配置public void Configure(IApplicationBuilder app, IWebHostEnvironment env){//是否为开发模式 启动配置文件launchSettings.json //if (env.IsProduction())//if (env.IsStaging())//if (env.IsEnvironment("Development")) //自定义环境变量if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Error"); app.UseHsts();}}
//方法级别的配置//可以单独针对各个环境配置ConfigureServices,根据方法名太判断,Configure+环境变量名+Services(),如果当前环境变量没有对应的ConfigureServices方法则走默认的ConfigureServices()public void ConfigureDevelopmentServices(IServiceCollection services){//开发环境配置//ConfigureServices(services);...具体配置}//可以单独针对各个环境配置Config,根据方法名太判断,Configure+环境变量名(),如果当前环境变量没有对应的Config方法则走默认的Configure()
public void ConfigureDevelopment(IApplicationBuilder app, IWebHostEnvironment env)
{//开发环境配置//Configure(app, env);...具体配置
}
3.添加前端包
libman
- 我们可使用libman非常方便的添加我们的前端包,而且默认配置的路径就在wwwroot下
- 我们也可以创建npm的配置文件package.json,然后在配置文件中添加需要安装的前端包,不过默认生成目录不在wwwroot下,如果使用vs的话还是推荐使用libman
4.控制器和视图
- 这部分后面有机会详细介绍
5.配置文件
默认配置文件
- 默认配置文件为 appsettings.json ,这个系统会自动加载,无须显式声明。
- 针对不同的环境我们可以创建对应的配置文件。
- 配置文件默认是在程序启动的时候会加载一次,所以如果发生数修改,除非程序重启不然无法生效。下面会介绍如何自动同步配置文件。
加载自定义配置文件
- 我们创建自定义配置文件可以在程序启动的时候加载进去。
- 自定义的配置文件也可以根据不同环境创建多个,程序运行的时候会根据环境自己加载对应的配置。
- 开发环境 Development
- 集成环境 Integration
- 测试环境 Testing
- 预发布环境 Staging
- 生产环境 Production
public class Program
{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, configBuilder) => {//清除默认配置文件//configBuilder.Sources.Clear();//添加新的配置文件configBuilder.AddJsonFile("bussetting.json");configBuilder.AddJsonFile("bussetting.Production.json");}).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();//webBuilder.UseKestrel();});
}
配置文件修改自动同步
- 添加参数 reloadOnChange 可以对配置源文件变化进行监控,一旦发生变化会触发重新加载配置文件。
configBuilder.AddJsonFile("bussetting.json", optional: true, reloadOnChange: true);
configBuilder.AddJsonFile("bussetting.Production.json", optional: true, reloadOnChange: true);