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

注册startup类能够配置咱们web应用的启动逻辑,使用的就是UseStartUp方法,asp.net core就会实例化这个类
并调用startup类里面的两个方法ConfigureServices和Configure

ConfigureServices方法里是注册服务,注入这些服务后就能够注入到其余的方法或者类里面进行使用,这些注册的服务包括咱们本身的写这些服务,也包含.net core预约义好的一些服务

也包含.net core预约义好的一些服务,有一些默认也是没有注册的,须要咱们在这里注册下

方法:Configure里面,咱们使用IApplicationBuilder来配置咱们的中间件,在真实的项目里不多使用app.Run方法,一般app.Run里面配置的中间件都是很是简单的中间件,因此在真实的羡慕里面,不大用app.Run这个中间件

真实项目里一般使用app.use开头的这些方法
useCors是跨域的,use开头的方法把中间件都封装了另一个方法或者另一个类里面了

例如这里使用useWelcomePage();这个中间件,运行查看效果

打开

换个路由地址都是这个欢迎页,无论你进来是什么样的路径,都是这个欢迎页,后面的中间件就不会走了

中间件的参数一般在这里写,一般是一个对象,例如这里

而后经过参数的设置来配置中间件

例如这里咱们设置中间件的路径是/Welcome

路由路径后面加上welcome才会跳转到这个欢迎页

其余路径就会走下面的 中间件html

app.use方法

直接在方法里面写中间件,比直接UseWelcomePage更底层一些

他的参数是一个Func,Func自己的参数类型就是RequestDelegate,Func返回的类型也是RequestDelegate
RequestDelegate类型就是一段可执行的代码

这个参数Func有个参数,咱们叫它next,如今这个next就是RequestDelegate类型,RequestDelegate表明什么意思呢?
它就表明在管道里,下一个将要执行的中间件,若是我在管道调用这个next就表示容许写一个中间件来处理http请求

中间件里须要返回的类型仍是一个RequestDelegate

它须要传入一个httpContext做为他的参数,它的返回类型是Task

若是路径里面带firtst就输出一段字符串,不然就走next执行下一个中间件

输入first的结果



输入其余地址就走最后一个中间件web

注入日志工具

为了看走的中间件的明细,这里注入日志工具
Logger已经注册到服务里面了,是预先注册的


用命令行运行









这里直走了一次

选中的这段代码,这个方法,只是在启动配置的时候走了一遍

这块才是咱们中间件的代码,每次请求可能都会走这段代码,若是没有其余的中间件拦截的话编程

异常信息

把其余的中间件代码都删除,在这里抛出一段异常看一下会有什么效果


做为开发者咱们可能须要错误的信息,就须要这个中间件,把这段代码取消注释

显示了详细的错误信息,异常发生在 哪行代码

UseDeveloperExceptionPage放在位置比较靠前的位置,开发者异常页面只适合给开发者看,客户不适合看
在开发的环境下才会中这个中间件

经过IHostingEnvironment来获取到底应用于那个环境里,这里这个环境一般是指开发环境或者是生产环境,或者测试环境

看下env里面有什么:


IsStaging叫作预演环境也行,演示环境也行

也可使用自定义的其余的环境,判断是不是集成测试的环境,参数是自定义的,能够随便起名

如何设置或者取得环境变量的值

也可使它设置环境变量的值

环境变量的属性名呢?刚才说的都是环境变量的值。ASPNETCORE_ENVIRONMENT这个是环境变量的属性名


使用IISExpress调试就会走这段配置

因此这里咱们运行后走的是Development环境

配置的属性也能够在这里修改

修改为Production

而后这里这个文件就编程了Production

改为Staging

属性这里也发生了改变

命令行走的是这一段代码



对应的分别是这两段

开发环境会把这个文件也会追加上
跨域

视图静态文件中间件

建立wwwroot文件夹,建立完成后,文件夹的图标立马变了

在wwwroot文件夹下新建index.html文件



运行起来, 可是输入路径找这个index.html找不到

由于startUp里面设置的中间件只能返回welcome的信息

咱们须要设置另一个中间件UseStaticFiles

再次访问,能够访问到了

若是想使用其余的文件件名做为默认文件,能够在参数里面进行配置,注意这里是UseDefaultFiles()这个中间件

UseDefaultFiles并非视图文件,并不会把index.html内容返回去。它会改变请求的路径,它把这个请求的路径改为好像是咱们要找的是index.html,他就改为index.html这个路径
而后再把这个请求传送到下一个中间件。也就是这个UseStaticFiles,UseStaticFiles一看是index.html,他就会找到这个文件,并把这个文件返回去。就是这么个原理,
因此中间件的顺序很重要
若是把UseStaticFile放在UseDefaultFiles的前面,那么就找不到这个页面了。


UserFileServer把UseStaticFile和UseDefaultFiles这两个中间件包进去了。可是他还有一些其余功能,包括目录浏览。这里直接使用这一个中间件也是能够的

只写这一个也能够正常的访问







 app

相关文章
相关标签/搜索