ASP.NET Core MVC学习笔记(一)

学习https://www.52abp.com课程的总结,文档是https://www.52abp.com/Wiki。

一、亮点及特性
跨平台
MVC与WebAPI统一的编程模型
模块化:中间件
可测试性
开源
依赖注入

二、项目文件

.csproj是根据编程语言的文档所使用;
不需要卸载项目就可以编辑项目文件;
项目文件不包含任何文件夹或文件引用;
文件系统确定哪些文件和文件夹属于项目。

TargetFramework:在应用程序中指定你的目标框架;指定目标版本需要用到的TargetFrameworkMoniker(TFM)。
AspNetCoreHostingModel:指定应用程序的托管形式,InProcess或OutOfProcess。
InProcess即在IIS工作进程(w3wp.exe)中托管ASP.NET Core应用程序;
OutOfProcess即将Web请求转发到后端的ASP.NET Core中,而整个应用程序是运行在ASP.NET Core中内置的Kestrel中;
ASP.NET Core默认采用的是OutOfProcess托管。程序代码是显式声明。

PackageReference:用于包含对应用程序安装的Nuget包的引用
Metapackage(综合包)Microsoft.AspNetCore.App本身是没有任何内容的

CreateDefaultBuilder()执行的一些任务:设置web服务器,加载主机和应用程序配置表信息,配置日志记录

三、ASP.NET Core进程内(InProcess)托管
w3wp.exe或iisexpress.exe
该应用程序托管在IIS工作进程中
只有一个Web服务器
从性能角度来看,在进程托管中,优于进程外托管。

OutOfProcess进程外托管
dotnet.exe
kestrel可以用作面向Internet的web服务器,
kestrel还可以与反向代理服务器结合使用,例如IIS,Nginx或Apache,
在内部和外部web服务器之间代理请求的损耗。

四、launchSettings.json
本地配置相关信息

appsettings.json

ASP.NET Core中配置源(顺序正好相反):
①appsettings.json,appsettings.{Environment}.json,不同环境下对应不同的托管环境;
②User secrets(用户机密);③Environment variables(环境变量);④Command-line arguments(命令行参数)
访问配置信息:IConfiguration配置接口

读取方法,先引入IConfiguration 

private readonly IConfiguration _configuration;
public Startup(IConfiguration configuration)
{
     _configuration = configuration;
}

在Configure中的app.run()中

var configVal= _configuration["MyKey"];

[]中为在json里配置的字段名称

五、中间件
处理请求和信息的管道。
可同时被访问和请求;可以处理请求后,然后将请求传递给下一个中间件;可以处理请求后,并使管道短路;可以处理传出响应;中间件是按照添加的顺序执行的.
所有的请求处理都会在每个中间件组件调用next()方法之前触发,当中间件处理请求并产生响应时,请求流程会在管道开始反向传递,所有的响应处理都会在每个中间件组件调用next()方法之前触发

 1 app.Use(async (context,next) => {
 2             context.Response.ContentType = "text/plain;charset=utf-8";
 3              logger.LogInformation("MW1:传入请求");
 4             await next();
 5              logger.LogInformation("MW1:传出响应");
 6          });
 7 app.Use(async (context, next) => {
 8              logger.LogInformation("MW2:传入请求");
 9             await next();
10             logger.LogInformation("MW2:传出响应");
11          });
12 app.Run(async (context) =>
13             {
14             await context.Response.WriteAsync("MW3:处理请求并生成响应");
15              logger.LogInformation("MW3:处理请求并生成响应");
16 });

显示为

MW1:传入请求--》MW2:传入请求--》MW3:处理请求并生成响应

MW3:处理请求并生成响应--》MW2:传出响应--》MW1:传出响应

六、静态文件
ASP.NET Core默认不支持静态文件的服务,
默认的静态服务文件夹为wwwroot
要使用静态文件,必须使用UseStaticFiles()中间件
要定义静态文件,必须使用UseDefaultFiles()中间件

DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions();
defaultFilesOptions.DefaultFileNames.Clear();
defaultFilesOptions.DefaultFileNames.Add("index.html");

//添加默认文件中间件

app.UseDefaultFiles(defaultFilesOptions);

//静态文件中间件

app.UseStaticFiles();

默认支持的文件列表index.html,index.htm 默认,default.html,default.htm

UseDefaultFiles()必须注册在UseStaticFiles()前面

UseFileServer结合了UseDefaultFiles,UseStaticFiles和UseDirectoryBrowser中间件的功能

FileServerOptions fileServerOptions = new FileServerOptions();            
fileServerOptions.DefaultFilesOptions.DefaultFileNames.Clear();
fileServerOptions.DefaultFilesOptions.DefaultFileNames.Add("index.html"); app.UseFileServer(fileServerOptions);

七、异常是怎么抛出来的

在管道中使用UseDeveloperExceptionPage启用中间件
必须尽可能的在管道中提早注入
异常展示包含Stack Trace,Query String Cookies和HTTP Headers
用于自定义异常页面,可以使用DeveloperExceptionPageOptions对象

//显示错误代码处上下行数
DeveloperExceptionPageOptions developerExceptionPageOptions = new DeveloperExceptionPageOptions();
developerExceptionPageOptions.SourceCodeLineCount = 10;                
app.UseDeveloperExceptionPage(developerExceptionPageOptions);

八、环境变量

开发环境变量:Development,Staging,Production
ASPNETCORE_ENVIRONMENT变量可以设置在运行时环境(Runtime Environment)
开发环境(development),集成环境(integration),测试环境(testing),QA验证,模拟环境(staging),生产环境(Production)
在开发机器上,我们在launchSettings.json文件中设置环境变量,
而Staging或者Production的变量,我们尽量在操作系统中设置,
使用IHostingEnvironment服务访问运行时环境,
除了标准环境(Development,Staging,Production)之外,还支持自定义环境(UAT,QA)等。

原文地址:https://www.cnblogs.com/Lvkang/p/11698614.html