注册startup类可以配置我们web应用的启动逻辑,使用的就是UseStartUp方法,asp.net core就会实例化这个类
并调用startup类里面的两个方法ConfigureServices和Configure
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2
ConfigureServices方法里是注册服务,注入这些服务后就可以注入到其他的方法或者类里面进行使用,这些注册的服务包括我们自己的写这些服务,也包含.net core预定义好的一些服务
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_02
也包含.net core预定义好的一些服务,有一些默认也是没有注册的,需要我们在这里注册下

方法:Configure里面,我们使用IApplicationBuilder来配置我们的中间件,在真实的项目里很少使用app.Run方法,通常app.Run里面配置的中间件都是非常简单的中间件,所以在真实的羡慕里面,不大用app.Run这个中间件
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_03
真实项目里通常使用app.use开头的这些方法
useCors是跨域的,use开头的方法把中间件都封装了另外一个方法或者另外一个类里面了
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_04
例如这里使用useWelcomePage();这个中间件,运行查看效果
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_05
打开
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_06
换个路由地址都是这个欢迎页,不管你进来是什么样的路径,都是这个欢迎页,后面的中间件就不会走了
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_07
中间件的参数通常在这里写,通常是一个对象,例如这里
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_08
然后通过参数的设置来配置中间件
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_09
例如这里我们设置中间件的路径是/Welcome
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_10
路由路径后面加上welcome才会跳转到这个欢迎页
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_环境变量_11
其他路径就会走下面的 中间件ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_12

app.use方法

直接在方法里面写中间件,比直接UseWelcomePage更底层一些
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_13
他的参数是一个Func,Func本身的参数类型就是RequestDelegate,Func返回的类型也是RequestDelegate
RequestDelegate类型就是一段可执行的代码
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_14
这个参数Func有个参数,我们叫它next,现在这个next就是RequestDelegate类型,RequestDelegate代表什么意思呢?
它就代表在管道里,下一个将要执行的中间件,如果我在管道调用这个next就表示允许写一个中间件来处理http请求
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_15
中间件里需要返回的类型还是一个RequestDelegate
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_16
它需要传入一个httpContext作为他的参数,它的返回类型是Task
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_17
如果路径里面带firtst就输出一段字符串,否则就走next执行下一个中间件
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_18
输入first的结果
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_19

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_20
输入其他地址就走最后一个中间件ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_环境变量_21

注入日志工具

为了看走的中间件的明细,这里注入日志工具
Logger已经注册到服务里面了,是预先注册的
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_22
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_23
用命令行运行
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_24

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_环境变量_25

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_26

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_27

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_28
这里直走了一次
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_环境变量_29
选中的这段代码,这个方法,只是在启动配置的时候走了一遍
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_30
这块才是我们中间件的代码,每次请求可能都会走这段代码,如果没有其他的中间件拦截的话ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_31

异常信息

把其他的中间件代码都删除,在这里抛出一段异常看一下会有什么效果
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_32
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_33
作为开发者我们可能需要错误的信息,就需要这个中间件,把这段代码取消注释
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_34
显示了详细的错误信息,异常发生在 哪行代码
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_35
UseDeveloperExceptionPage放在位置比较靠前的位置,开发者异常页面只适合给开发者看,客户不适合看
在开发的环境下才会中这个中间件
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_36
通过IHostingEnvironment来获取到底应用于那个环境里,这里这个环境通常是指开发环境或者是生产环境,或者测试环境
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_37
看下env里面有什么:

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_38
IsStaging叫做预演环境也行,演示环境也行
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_39
也可以使用自定义的其他的环境,判断是否是集成测试的环境,参数是自定义的,可以随便起名
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_40
如何设置或者取得环境变量的值
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_41
也可以使它设置环境变量的值
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_环境变量_42
环境变量的属性名呢?刚才说的都是环境变量的值。ASPNETCORE_ENVIRONMENT这个是环境变量的属性名

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_43
使用IISExpress调试就会走这段配置
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_44
所以这里我们运行后走的是Development环境
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_45
配置的属性也可以在这里修改
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_46
修改成Production
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_47
然后这里这个文件就编程了Production
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_48
改成Staging
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_49
属性这里也发生了改变
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_50
命令行走的是这一段代码
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_51
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_52
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_html_53
对应的分别是这两段
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_54
开发环境会把这个文件也会追加上
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_环境变量_55

视图静态文件中间件

创建wwwroot文件夹,创建完成后,文件夹的图标立马变了
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_环境变量_56
在wwwroot文件夹下新建index.html文件
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_环境变量_57

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_环境变量_58
运行起来, 但是输入路径找这个index.html找不到
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_59
因为startUp里面设置的中间件只能返回welcome的信息
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_60
我们需要设置另外一个中间件UseStaticFiles
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_asp.net core 2.2_61
再次访问,可以访问到了
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_中间件_62
如果想使用其他的文件件名作为默认文件,可以在参数里面进行配置,注意这里是UseDefaultFiles()这个中间件
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_63
UseDefaultFiles并不是视图文件,并不会把index.html内容返回去。它会改变请求的路径,它把这个请求的路径改成好像是我们要找的是index.html,他就改成index.html这个路径
然后再把这个请求传送到下一个中间件。也就是这个UseStaticFiles,UseStaticFiles一看是index.html,他就会找到这个文件,并把这个文件返回去。就是这么个原理,
所以中间件的顺序很重要
如果把UseStaticFile放在UseDefaultFiles的前面,那么就找不到这个页面了。
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_环境变量_64

UserFileServer把UseStaticFile和UseDefaultFiles这两个中间件包进去了。但是他还有一些其他功能,包括目录浏览。这里直接使用这一个中间件也是可以的
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_环境变量_65
只写这一个也可以正常的访问
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件_sed_66