Asp.Net Core-中间件

在这一章,我们将了解如何设置中间件。中间件技术在 ASP.NET Core中控制我们的应用程序如何响应 HTTP 请求。它还可以控制应用程序的异常错误,这是一个在如何进行身份验证和授权用户执行特定的操作的关键。

  • 中间件是组装成应用的管道来处理请求和响应的软件组件。

  • 每个组件可以选择是否要在管道中将请求传递到下一个组件,并可以在管道中执行某些操作之前和之后的任务。

  • Request委托用于构建请求管道。Request委托用来处理每个HTTP请求。

  • 每件中间件在 ASP.NET Core都是一个对象,并且每一块有非常具体、 专注和有限的作用。

  • 最终,我们需要很多的中间件为应用程序提供适当的行为。

现在让我们假设我们想将每个对我们应用程序的请求都记录日志。

  • 在这种情况下,我们安装到应用程序中的第一块中间件是一个日志组件。

  • 这个日志程序可以看到一切传入的请求,然后该中间件只是记录一些信息,然后传递这个请求下一个块中间件。

  • 中间件是以一系列的组件出现在这个处理管道中。

  • 我们安装到应用程序的下一个中间件是一个授权组件。

  • 一个组件可能是寻找特定cookie或访问HTTP标头中的令牌。

  • 如果授权组件发现一个令牌,它允许请求继续。

  • 如果不是,授权组件本身可能会响应请求的HTTP错误代码或将用户重定向到登录页面。

  • 否则,授权组件将请求传递给下一个路由器的中间件。

  • 一个路由器查看URL,并确定下一步的行动。

  • 路由器是在做一些回应,如果路由器没有找到任何回应,路由器本身可能会返回404 Not Found错误。


案例

现在让我们通过一个简单的例子来理解更多关于中间件的知识。我们通过使用我们的启动类的Configure方法来配置中间件组件。

using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
namespace FirstAppDemo { public class Startup { public Startup() { var builder = new ConfigurationBuilder() .AddJsonFile("AppSettings.json"); Configuration = builder.Build(); }  public IConfiguration Configuration { get; set; }  // This method gets called by the runtime. // Use this method to add services to the container. // For more information on how to configure your application, // visit http://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { }  // This method gets called by the runtime.  // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler();  app.Run(async (context) => { var msg = Configuration["message"]; await context.Response.WriteAsync(msg); });  }  // Entry point for the application. public static void Main(string[] args) => WebApplication.Run<Startup>(args); }
}
Configure()方法内,我们将调用IApplicationBuilder接口的扩展方法来添加中间件。

默认情况下在一个新的空项目有两块中间件-

  • IISPlatformHandler

  • Middleware registered with app.Run


IISPlatformHandler

IISPlatformHandler允许我们使用Windows身份验证。它将着眼于每个传入请求,看看是否有任何Windows身份信息相关的请求,然后调用下一个块中间件。


Middleware registered with app.Run

在这种情况下一个中间件在app.Run中注册的中间件。Run方法允许我们传入另一种方法,我们可以使用它来处理每一个响应。Run方法不是你经常会看到的,我们可以称它为一个中间件的终端。

你注册运行的中间件将永远不会有机会调用另一个中间件,它唯一能做的就是接收请求,便要产生某种反应。

你也访问到一个响应对象,你可以在响应对象中添加一些字符串。

如果你想在app.Run之后注册另一个中间件,这段中间件将永远不会被调用,因为Run方法是一个中间件的终端。它不会调用下一个块中间件。


如何添加一个中间件

让我们着手进行以下步骤来添加另一个中间件 −

步骤1−右键单击项目并选择Manage NuGet Packages。

步骤2−搜索 Microsoft.aspnet.diagnostics,此特定的软件包包含许多不同种的中间件,我们可以使用。

步骤3−如果该包没有安装在您的项目中,那选择安装这个包。

步骤4−现在让我们在Configure()方法调用app.UseWelcomePage中间件。

// This method gets called by the runtime.
// Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler(); app.UseWelcomePage();  app.Run(async (context) => { var msg = Configuration["message"]; await context.Response.WriteAsync(msg); });  

步骤 5 − 运行您的应用程序,您将看到以下的欢迎屏幕。

这个欢迎屏幕可能不是那么有用。

步骤6−让我们试试别的东西,可能是更有用的,而不是使用欢迎页面,我们将使用RuntimeInfoPage。

 1 // This method gets called by the runtime.
 2 // Use this method to configure the HTTP request pipeline.
 3 public void Configure(IApplicationBuilder app) {
 4    app.UseIISPlatformHandler();
 5    app.UseRuntimeInfoPage();
 6
 7    app.Run(async (context) => {
 8       var msg = Configuration["message"];
 9       await context.Response.WriteAsync(msg);
10    });
11 }

第 7 步 − 保存您的 Startup.cs 页面并刷新您的浏览器,你会看到下面的页面。

这个 RuntimeInfoPage 是中间件,将只响应一个特定的 URL 的请求。如果传入的请求与该 URL 不匹配,这个中间件只是让请求传递到下一件中间件。该请求将通过 IISPlatformHandler 中间件,然后转到 UseRuntimeInfoPage 中间件。它不会创建响应,所以它会转到我们的应用程序。运行并显示该字符串。

步骤8−我们在URL结尾添加“ runtimeinfo”。现在,您将看到一个页面,该页面是由中间件运行时信息页面。

你将看到一个返回页面,它给你展示了一些关于你的运行时环境,如操作系统、运行时版本,结构,类型和您正在使用的所有包的信息。

转载于:https://www.cnblogs.com/kejie/p/7016116.html

asp.net core 教程(六)-中间件相关推荐

  1. 给 asp.net core 写个中间件来记录接口耗时

    给 asp.net core 写个中间件来记录接口耗时 Intro 写接口的难免会遇到别人说接口比较慢,到底慢多少,一个接口服务器处理究竟花了多长时间,如果能有具体的数字来记录每个接口耗时多少,别人再 ...

  2. ASP.NET Core 中的中间件

    前言   由于是第一次写博客,如果您看到此文章,希望大家抱着找错误.批判的心态来看. sky! 何为中间件? 在 ASP.NET Framework 中应该都知道请求管道.可参考:浅谈 ASP.NET ...

  3. ASP.NET Core教程【二】从保存数据看Razor Page的特有属性与服务端验证

    前文索引: ASP.NET Core教程[一]关于Razor Page的知识 在layout.cshtml文件中,我们可以看到如下代码: <a asp-page="/Index&quo ...

  4. ASP.NET Core教程

    第一章 .Net Core入门 1 .net core入门 第二章 .Net Core重难点知识 2.1 C#新语法 2.2 异步编程 2.3 LINQ 第三章 .Net Core核心基础组件 3.1 ...

  5. asp.net core 教程(七)-异常处理、静态文件

    Asp.Net Core-异常处理 Asp.Net Core-异常处理 在这一章,我们将讨论异常和错误处理.当 ASP.NET Core应用程序中发生错误时,您可以以各种不同的方式来处理.让我们来看看 ...

  6. AspNetCoreRateLimit - ASP.NET Core 速率限制中间件。

    介绍 AspNetCoreRateLimit 是一种 ASP.NET Core 速率限制解决方案,旨在控制客户端可以根据 IP 地址或客户端 ID 向 Web API 或 MVC 应用程序发出请求的速 ...

  7. 如何在 ASP.NET Core 中 自定义中间件

    ASP.NET Core 是一个跨平台,开源的,轻量级,高性能 并且高度模块化的web框架,同时扩展性也是非常强,你可以在 request -> response 请求管道中安插各种中间件来根据 ...

  8. 理解ASP.NET Core中的中间件

    中间件是ASP.NET Core的一个重要特点,ASP.NET Core应用程序之所以能够灵活地处理各种各样的请求,完成都是由于中间件,那么它究竟是怎么一回事呢? 一.理解中间件 ASP.NET Co ...

  9. 小白开学Asp.Net Core 《六》 —— 探究.Net Core 跨平台的奥秘

    1.写这篇文章的初衷 有好多朋友反馈看不懂我写的开源的一个练手项目(GitHub:https://github.com/AjuPrince/Aju.Carefree)也有好多人都希望我能写一些简单的入 ...

最新文章

  1. stm32 工业按键检测_「正点原子STM32Mini板资料连载」第七章 按键输入实验
  2. 系统要关闭,可我程序还有事要处理?
  3. python打开文件夹的权限_python修改linux中文件(文件夹)的权限属性操作
  4. GCD介绍(一): 基本概念和Dispatch Queue (转载)
  5. logback基础配置文件
  6. URL去重的几种方法
  7. sync不生效 vue_Vue实战项目-记账器-重要知识点汇总
  8. 深入理解BitMap
  9. eclipse中server name选项变灰
  10. 特斯拉同意支付150万美元和解电池电压降低的索赔
  11. 洛谷P2698 花盆Flowerpot【单调队列】
  12. XML通过XSL格式化的那点事(XML到自定义节点折叠显示)
  13. 使用StatSVN编译代码变更(未成功)
  14. Iass、Pass、Sass三种云服务有什么区别?
  15. sql java驱动程序_microsoft sql server jdbc驱动下载
  16. Windows 7 旗舰版 64位 (纯净版)
  17. 数字信号处理--语音信号变声报告
  18. 目前有哪些高并发解决方案?
  19. python报告水印怎么弄_如何用python操作word添加水印?这里有个问题,希望大家看一下!...
  20. 如何用电话扩大Android内存,扩大内存 Android开启App2SD+教程

热门文章

  1. 星空唯美浮雕效果背景源码
  2. 西工大18秋《C语言程序设计》平时作业,西工大18秋《C语言程序设计》平时作业(100分)...
  3. gs算法的matlab代码_【图像算法amp;MATLAB】直方图均衡(干货代码)
  4. php怎么给接口里的方法传参,PHP接口中方法的参数和实现类方法中的参数可以不一致的问题...
  5. 通用运输APP/小型物流托运APP/客运班车APP/PHP+MYSQL管理后端
  6. 一个比较不错的swapidc模板源码
  7. 新版《谷歌搜索引擎优化初学者指南》
  8. linux下关于密码复杂度设置
  9. 安装图像标注工具Labelme并使用其制作自己的数据集
  10. leetcode算法—两数之和 Two Sum