注册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. C语言知识结构之二

    C语言的知识结构整理成思维导图,例如以下图所看到的: 这张图的总体思路是: 用C敲代码.该学会什么? 要用C写的更好,改学会什么? 事实上.仅仅要是分层的知识结构,大致的思路是: 首先,研究本层的知识 ...

  2. max-points-on-a-line——穷举

    Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...

  3. opencv2反投影直方图以检測特定的图像内容

    #ifndef HISTOGRAM_H_ #define HISTOGRAM_H_ #include<opencv2/core/core.hpp> #include<opencv2/ ...

  4. MaterialImageLoading

    https://github.com/eltld/MaterialImageLoading

  5. DB主从一致性的几种解决方法

    https://www.cnblogs.com/KunLunSu/p/6826247.html

  6. Android如果动态改变CursorAdapter Item个数

    //adapter内部类 private class SearchAdapter extends CursorAdapter { @Override public View newView(Conte ...

  7. Python开发【第3节】【Python分支结构与循环结构】

    1.流程控制  流程: 计算机执行代码的顺序就是流程 流程控制: 对计算机代码执行顺序的管理就是流程控制 流程分类: 流程控制共分为3类: 顺序结构 分支结构/选择结构 循环结构 2.分支结构(if. ...

  8. XML复习笔记(复习资料为菜鸟教程里的XML教程)

    XML 指可扩展标记语言(eXtensible Markup Language) XML 的设计宗旨是传输数据,而不是显示数据. XML 标签没有被预定义.您需要自行定义标签. XML 被设计为具有自 ...

  9. gRPC错误码 http状态码 provide your APIs in both gRPC and RESTful style at the same time

    How gRPC error codes map to HTTP status codes in the response https://github.com/grpc-ecosystem/grpc ...

  10. CH 5402 选课(分组背包+树形DP)

    CH 5402 选课 \(solution:\) 很有讨论套路的一道题,利用树的结构来表示出不同课程之间的包含关系(这里还要建一个虚点将森林变成一颗打大树).然后用子树这个概念巧妙的消除了因为这些包含 ...