注册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才会跳转到这个欢迎页

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

app.use方法

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

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

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

中间件里需要返回的类型还是一个RequestDelegate

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

如果路径里面带firtst就输出一段字符串,否则就走next执行下一个中间件

输入first的结果


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

注入日志工具

为了看走的中间件的明细,这里注入日志工具
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这两个中间件包进去了。但是他还有一些其他功能,包括目录浏览。这里直接使用这一个中间件也是可以的

只写这一个也可以正常的访问

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 04. 中间件的更多相关文章

  1. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 03. 服务注册和管道

    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 03. 服务注册和管道 语雀: https://www.yuque.com/yuejiangliu/dotnet/ ...

  2. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器

    在MVC的请求管道 并不是  asp.net core的请求管道.所以说Filter是专用于MVC的 贯穿特性,横穿关注点.比如授权.日志 这里的Authorize其实就是一个Filter,主要用来授 ...

  3. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 02. Web Host 的默认配置

    视频地址: https://www.bilibili.com/video/av38392956/?p=2 语雀 https://www.yuque.com/yuejiangliu/dotnet/ixt ...

  4. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 12. Views 下

    ASP.NET Core MVC 13. 安装前端库 Partial VIew 就是部分View,他没有自己的数据,数据来自图中白色的那块,它的数据需要传进去,第一个参数是View的名称,第二个参数就 ...

  5. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 13. 安装前端库

    前端库使用npm进行安装,需要先建立webpack.json文件 因为我们没有使用npm安装任何库,所以npm的文件夹是空的 这里是用于开发时构建时引用的库写在这里 这里用到bootStrap 开发时 ...

  6. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 27. CICD Azure DevOps

    VSTS做持续集成 后来改名叫做Azure Deveps https://azure.microsoft.com/zh-cn/services/devops/ 这是中文的地址 创建一个项目 名称.描述 ...

  7. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 01. 创建项目 +项目结构和配置简介

    新建项目:Tutotial.Web 解决方案名称可以把web去掉 视频里面把git这个选项勾选了.我就不勾选了 dotnet CLI创建项目 首先必须安装好了.net Core的SDK dotnet ...

  8. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 05.Controller 的路由

    视频地址: https://www.bilibili.com/video/av38392956/?p=5 这里面就包含了MVC相关的库 可以通过打开右侧的Nuget库进行查看 这里修改下 ,只需要静态 ...

  9. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 06. Controller 返回View

    Controller父类会提供很多上下文的相关信息,还提供了很多封装的方法 返回的对象要求实现了IActionResult接口 继承父类,并引入命名空间 写this点就出现很多东西,这些就是上下文的信 ...

随机推荐

  1. 1054. 求平均值 (20)-PAT乙级真题

    今天刚刚到学校,2017年学习正式开始了,今天看到了浙大的<数据结构>这学期又要开课了,决定一定要跟着学习一遍:在大学生mooc网上学习:http://www.icourse163.org ...

  2. python遍历两个列表,若长度不等,用None填充

    zip经常会遇到截断问题,如:a = [1,2,3], b = [4,5,6,7],则zip(a,b) = [(1, 4), (2, 5), (3, 6)] 可考虑使用map: map(lambda ...

  3. [Javascript] Wrap fireEvent with fireEventAsync

    The idea is wrap a object with all its function methods and add some additional handling into a new ...

  4. Java学习之集合

    1.ArrayList:采用数组的形式保存对象,这种方式将对象保存在连续的位置中,所以查询效率比较高,但是插入删除时麻烦,并且ArrayList不是线程安全的. 2.Vector:保存对象的方式与Ar ...

  5. CPU Stepping

    http://baike.baidu.com/view/16839.htm?fr=ala0_1_1 步进 编辑   步进(Stepping)是CPU的一个重要参数,也叫分级鉴别产品数据转换规范,“步进 ...

  6. Python 模块的安装与使用

    我们知道使用函数不仅减轻了工作量,而且使代码更加简洁,更加的易于维护.但如果在另一个文件中,我们希望使用上一个文件中定义的某个函数,我们应该怎么办呢?我们需要重新将上一个函数再次实现一遍吗?而且,当我 ...

  7. Tomcat 80端口 配置及域名访问步骤

    一.修改端口tomcat默认监听端口是8080,我们如果想不带端口的直接访问项目,就必须监听80 端口: service.xml 以下代码段 <Connector port="8080 ...

  8. ExtJs学习笔记(1)---ExtJs安装及其使用

    从官网下载了ExtJs的3.2版本号的SDK,包括了代码依赖的具体说明.文档.范例和其它文件.当中,adapter和resources文件是Ext正常执行所必须的,其它的仅在开发过程中使用到. Ada ...

  9. HDOJ1006

    #include <cstdio>#include <algorithm>using namespace std;const double UB=43200;const dou ...

  10. VUE 之 vuex 和 axios

    1.Vuex 部分 1.1 Vuex 是专门为vue.js设计的集中式状态管理架构,其实就是将数据存在一个store中,共各个组件共享使用 1.2 配置: 1.2.1 下载:--npm install ...