首页 > 其他分享 >.Net Core MiddleWare

.Net Core MiddleWare

时间:2023-08-03 19:11:06浏览次数:40  
标签:Core MiddleWare await 中间件 next conext context Net app

目录

作用

中间件是一种装配到应用管道以处理请求和响应的软件。 每个组件:

  • 选择是否将请求传递到管道中的下一个组件。
  • 可在管道中的下一个组件前后执行工作。

请求委托用于生成请求管道。 请求委托处理每个 HTTP 请求。

Use

执行顺序为: 自定义中间件1Request -> 自定义中间件2Request -> ...Request -> 自定义中间件2Response -> 自定义中间件1Response

第一种

app.Use(async (conext, next) =>
{
    await conext.Response.WriteAsync("<h1>(1)</h1>");
    await next(conext);
    await conext.Response.WriteAsync("<h1>(1)</h1>");
});

第二种

使用拓展方法实现,在program.cs 文件中可以使用 app.MiddlewareExtexns() 达到相同的效果

namespace ExceptiopnWebApp.Expansion
{
    public static class MiddlewareExtexns
    {
        public static IApplicationBuilder UseMiddleWare(this IApplicationBuilder app)
        {
            return app.Use(async (conext, next) =>
            {
                await conext.Response.WriteAsync("<h1>(2)</h1>");
                await next(conext);
                await conext.Response.WriteAsync("<h1>(2)</h1>");
            });
        }
    }
}

UseMiddleWare

  1. 需要提供: public async Task InvokeAsync(HttpContext context)
  2. 如果中间件需要继续向下执行需要提供 private readonly RequestDelegate _next;

CustomMiddleWare.cs

namespace ExceptiopnWebApp.Middleware
{
    public class CustomMiddleWare
    {
        private readonly RequestDelegate _next;
        public CustomMiddleWare(RequestDelegate next)
        {
            _next = next;
        }

        public async Task InvokeAsync(HttpContext context)
        {
            await context.Response.WriteAsync("UseMiddleWare1");
            await _next(context);
            await context.Response.WriteAsync("UseMiddleWare1");
        }
    }
}

Program.cs

app.UseMiddleware<CustomMiddleWare>();

Map

  • 浏览器地址上出现字符匹配就进入你的中间件
app.Map("/Hello", app =>
{
    app.Use(async (context, next) =>
    {
        await context.Response.WriteAsync("World");
        await next(context);
    });
});

MapWhen

  • 条件成功就进入你的中间件
app.MapWhen(conext =>
{
    return conext.Request.Path.Value?.Contains("Name") ?? false;
}, app =>
{
    app.Use(async (context, next) =>
    {
        await context.Response.WriteAsync("Job!!!");
        await next(context);
    });
});

标签:Core,MiddleWare,await,中间件,next,conext,context,Net,app
From: https://www.cnblogs.com/qfccc/p/17604219.html

相关文章

  • RS485自由转PROFINET网关RS485自由通讯协议
    捷米JM-RS485/232-PN(RS485转Profinet)将具有RS485/232接口、自由通信协议接口的设备与PROFINET相连,作为PROFINET现场总线系统的一个设备。捷米JM-RS485/232-PN集成了一个2端口交换机。受支持的以太网服务:ping、arp、SNMP和LLDP。端口诊断。禁用端口。实时、等时同步实时通信(RT......
  • T4 模板: 为 ASP.NET MVC 开发人员快速入门指南
    http://blogs.msdn.com/b/webdev/archive/2009/01/29/t4-templates-a-quick-start-guide-for-asp-net-mvc-developers.aspx 在中提到我们的最近博客文章,ASP.NETMVC发布候选版,我们的代码生成功能(即,添加控制器和添加视图)现在使用T4(文本模板转换工具包)模板化技术在幕后。因为......
  • C# MVC 自学笔记—10 在 ASP.NET MVC 中使用页面检查器
    VisualStudio2012年页督察是与集成的浏览器的web开发工具。中集成浏览器中,选择任意元素,页面检查器立即突出显示该元素的源代码和CSS。可以浏览任何MVC视图、快速查找呈现标记的来源和使用右内的VisualStudio环境浏览器工具。观看视频本教程演示如何启用检查模式,然后快......
  • 堆 Heap & 栈 Stack(.Net)【概念解析系列_3】【C# 基础】
    〇、前言本文主要围绕.Net框架中的托管堆(Heap,简称堆)和堆栈(Stack,简称栈)展开。.Net程序在CLR(CommonLanguageRuntime公共语言运行时)上运行时,内存被从逻辑上划分为两个主要部分:堆和栈。除了栈和堆之外,CLR还维护了其他一些内存区域,例如静态存储区域(StaticStorageArea)、常量......
  • 自己整理的ASP.NET基础 (不断的更新)
    .列举ASP.NET页面之间传递值的几种方式。答.1).使用QueryString,如....?id=1;response.Redirect()....                 2).使用Session变量                 3).使用Server.Transfer--------------------------------------------......
  • Asp.net MVC 3实例学习之ExtShop(一)————创建应用并设置开发环境
         在VS2010中创建一个如图1所示的“ExtShop”项目,然后在图2的窗口中选择“Empty”,单击“OK”完成项目创建,项目的目录结构和已包含文件如图3所示。     其中,Content文件夹下的Site.css文件是整个网站的CSS文件。Script文件夹中,已包含了jquery的脚本文件。在View目录......
  • Netty 原理解析与实战开发(二)
    Netty原理解析与开发实战八、ChannelHandler8.1ChannelHandler介绍我们对数据的处理都是在ChannelHandler中完成的,Netty提供了众多ChannelHandler的实现类来帮助我们实现一些网络编程中通用功能,比如最常用的心跳检测、数据编解码等。Netty中的ChannelHandler分为两类,一类处......
  • PeneTration Notes(二)
    SNotes-2信息收集给出渗透目标:单位名称、靶标。单位信息首先需要收集单位的基本信息,通过:天眼查:登录后基本服务免费,可以免费查询单层股权穿透信息企查查:爱企查:登录即可免费使用绝大部分服务,但可能信息不全主要需要获取:法定代表人、单位官网、对外邮箱、股权穿透信息主要......
  • 如何把.net应用程序防止他人反编译,dll打包并搭建成一个合格的安装包
    背景知识:在理论上,任何.NET程序集(.dll文件或.exe文件)都可以被反编译。C#是一种托管语言,其代码编译成中间语言(IL)或称为CIL(CommonIntermediateLanguage),然后在.NET运行时中执行。反编译工具可以将IL代码还原回C#源代码,使得原本的C#代码可以被查看和修改。 最......
  • 配置 Forwarded Headers Middleware
    来自微软的说明:ConfigureASP.NETCoretoworkwithproxyserversandloadbalancers|MicrosoftLearn。通过该中间件,会更新:HttpContext.Connection.RemoteIpAddress:使用 X-Forwarded-For 请求头的值.其它的配置会影响到中间件如何设置 RemoteIpAddress的值.消费......