首页 > 编程语言 >Asp.NetCore Web应用程序中的请求管道和中间件

Asp.NetCore Web应用程序中的请求管道和中间件

时间:2023-06-05 17:04:10浏览次数:34  
标签:返回 Web Asp 请求 处理 app 中间件 应用程序

  你是否会迷惑当我们请求一个ASP.NetWeb应用程序以后,它是怎么处理这些请求的,后台是怎么工作的,今天就讲一下Asp.NetCore Web应用程序中的请求处理过程。

    上一节,我们讲到,Startup文件中用来配置中间件(middleware),这个中间件就是用来处理请求的。那标题中的请求管道又是什么呢,其实所有的中间件就组成了一个请求管道,我们的请求,到达ASP.NetWeb应用程序,就会被送到第一个中间件中,一个个的访问,每个中间件都对请求进行处理,直到进行到最后一个中间件原路返回处理结果,或者中途被某个中间件拦截直接返回处理结果。

    这种中间件的访问处理就像俄罗斯套娃一样,一层层深入访问,一层层返回结果。下面来看一下startup中的初始中间件都有哪些。

Asp.NetCore Web应用程序中的请求管道和中间件_ASP

 

 

    注意,中间件的顺序也是有规律的。错误处理中间件的添加逻辑,总是第一位的,

if (env.IsDevelopment()) { 
    app.UseDeveloperExceptionPage(); 
} else {   
   app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
 }

 

    Endpoints中间件总是在最后,它用于处理以上中间件都没有捕获到的情况,初始配置是返回homecontroller中的index方法,他是直接拦截并返回的,所以在它以后的中间件,总是得不到执行。

app.UseEndpoints(endpoints =>  {
      endpoints.MapControllerRoute(
          name: "default",
          pattern: "{controller=Home}/{action=Index}/{id?}");
});

 

    我们再回过头来看这个方法声明

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

 

    如果在VS中打开,你会发现它是“0 references”,没有引用那它是怎么执行的呢,其实,我们不会手动去调用它,这个方法是交由CLR去调用的,我们可以看到负责添加中间件的参数是继承了IApplicationBuilder 这个接口的对象,所以很清楚的,我们了解到,这个类是负责Build Application 的,所以这个方法是参与到程序的生成期的,不是运行期的。

    .NetCore为我们提供了一些必须的中间件,约定以Use开头,我们可以直接去添加使用,下面简单解释一些常用中间件的作用:

app.UseHttpsRedirection();//负责重定向页面
app.UseStaticFiles();//添加静态文件(wwwroot中的)
app.UseRouting();//对路由的支持
app.UseAuthorization();//负责授权

 

    请求和响应,就是在请求管道中被中间件层层处理并返回的过程,下一节会演示一下如何自定义一个中间件,我们可以通过自定义中间件处理逻辑来处理请求

 



标签:返回,Web,Asp,请求,处理,app,中间件,应用程序
From: https://blog.51cto.com/u_4018548/6417935

相关文章

  • asp.net core的输入模型验证
    数据验证特性RequiredAttribute:表示数据不能为空RegularExpressionAttribute:正则校验CompareAttribute:和某个属性比较RangeAttribute:表示在某个区间之内MaxAttribute:最大值MinAttribute:最小值StringLengthAttribute:验证字符串长度DataTypeAttribute:验证数据类型在Models页面下面新......
  • asp.net core 过滤器
         ......
  • Web安全测试—工具安装之Firefox插件
    Firefox网页浏览器具有可扩展的附加组件架构,是可用于Web应用安全测试的最佳浏览器。https://www.mozilla.org/en-US/firefox/即使应用本身不是专门为Firefox兼容性而编写的,只要在使用Firefox时,不会彻底破坏功能的实现,仍然可以使用Firefox来测试运行在后台,与安全有关的内......
  • 【程序人生】Java Web 开发脚手架调研
    文章目录GiteeMostValueProject铭飞BootDoRuoYijeecg-bootrenren-fast调研时间2019.06.18GiteeMostValueProject铭飞/MCMS4.7.0bootdoruoyi3.4jeecg-bootrenren-fast托管仓库https://gitee.com/mingSoft/MCMShttps://gitee.com/lcg0124/bootdohttps://gitee.com/y_pro......
  • 第四十八节:Core7.0中速率中间件详解
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 【IDE】WebStorm 调整Tab缩进为2空格 -- 为遵循ESLint语法规范
    在使用Vue开发项目的过程中,为了遵循ESLint语法规范,我们需要把Tab缩进改为2个空格IDEversionWebStorm2018.3步骤一修改这三处的值为:2步骤二把这两处默认的勾选去掉,不让其detection当前文件的Tab缩进注意!通过上面两个步骤,细心的同学会发现,我们只是改变了在JS文件的Tab缩进改为2个空格......
  • asp.net core从数据库生成实体类,修改实体类
    前言花了我2个小时,终于知道怎么更新.netcore里面的模型层了。。。虽然方法很不正规提示:以下是本篇文章正文内容,下面案例可供参考一、asp.netcore生成从数据库生成实体类1、新建.netcore类库项目我是用的vs2019,其他版本类似2、安装NuGet程序包,三个如下图所示打开NuGet程序包选......
  • 利用frp进行内网穿透,实现本地web服务向外提供(https)
    0x01先决条件有一台公网服务器0x02初始项目把frps放到公网服务器把frpc放到内网服务器0x03服务端配置[common]bind_port=2333#frp服务端口token=token@xxxx#认证口令allow_ports=443,80#开放的端口,限制后增加安全0x04客户端配置[common]server_addr=......
  • kettle web springboot mvn dockerfile
    远程构建dcokerfileFROMopenjdk:8-jdk-alpineasTEMP_BUILD_IMAGERUNset-eux&&sed-i's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g'/etc/apk/repositoriesRUNapkupdate&&\apkadd--no-cachebashcurlwget&&......
  • cnblogs 停更, 迁移到 GitHub SSR website All In One
    cnblogs停更,迁移到GitHubSSRwebsiteAllInOnecnblogs迁移,停更old......