hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

在ASP.NET Core中编写及格的中间件

2019-11-18杂谈搜奇网33°c
A+ A-

  这篇文章探讨了让差别的要求去运用差别的中间件,那末我们应当怎样设置ASP.NET Core中间件?实在中间件只是在ASP.NET Core中处置惩罚Web要求的管道。一切ASP.NET Core应用顺序最少须要一个中间件来相应要求,而且您的应用顺序实际上只是中间件的鸠合。固然MVC管道自身就是中间件,早在WebForm时期就涌现过HttpModules、HttpHandler、那个时刻悠然记得我经由过程它们来组织我的广告体系,不闲扯我们继承。

  每一个中间件组件都有一个带有HttpContext参数的Invoke要领。您能够运用这个参数来处置惩罚要领。

public async Task Invoke(HttpContext context)
{
    if (context.Request.Path...)
    {
        await context.Response.WriteAsync("writing text...");
    }
}

   应用顺序中最顶层的中间件将一直针对每一个要求被挪用。这是由.NET框架自动完成的。中间件能够向客户端发送相应,也能够挪用下一个中间件。关于后一种挑选,它固然须要接见下一个中间件组件。这就是为何大多数中间件组件都是运用带有RequestDelegate参数的组织函数定义的。总之,RequestDelegate会自动添补,您无需在乎。

   中间件在Startup.cs的Configure要领中注册。Configure要领具有IApplicationBuilder参数,该参数供应了一切范例的中间件注册所需的要领,我们试着去编写一个中间件。

public class MyCustomMiddleware
    {
        private readonly RequestDelegate _next;
        public MyCustomMiddleware(RequestDelegate next)
        {
            _next = next;
        }
        public async Task Invoke(HttpContext context, IWebHostEnvironment env)
        {
            context.Response.Headers["app-name"] = env.ApplicationName+"Zaranet";
            context.Response.Headers["env-name"] = env.EnvironmentName+ "Zaranet";
            await _next(context);
        }
    }

随后我们在Startup.cs的Configure要领中经由过程 use 来注册自定义中间件。

public void Configure(IApplicationBuilder app, ...)
{
    app.UseMyCustomMiddleware();
}

  启动顺序我们发明一些一般,我们得到了我们想要的结果。

 

  但实际上,您很少须要直接挪用UseMiddleware,由于中间件作者的规范要领是编写特定于所注册中间件的扩大要领:

using MiddlerWareSolucation.MiddlerWare;
using Microsoft.AspNetCore.Builder;
namespace MiddlerWareSolucation.MiddlerWare_Extensions { public static class MyCustomMiddlewareExtensions { public static IApplicationBuilder UseMyCustomMiddleware(this IApplicationBuilder app) { app.UseMiddleware<MyCustomMiddleware>(); return app; } } }

随后直接挪用Extensions扩大要领,结果照样一样的。

public void Configure(IApplicationBuilder app, ...)
{
    app.UseMyCustomMiddleware();
}

 部份时刻我们想要经由过程客户端要求的途径来对我们的中间件举行启动,固然 MapWhen 许可您经由过程指定谓词将中间件管道分红两个完整自力的分支:

app.UseMiddlewareOne();

app.MapWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
     appBuilder.UseMiddlewareTwo();
});

app.UseMiddlewareThree();

在此示例中,中间件One将一直实行,假如要求途径以“ / api”开首,则将实行中间件Two。不然,将实行中间件Three。运用这类设置,中间件2和中间件3都没法针对单个要求实行。

我想说的是末了一种状况是,您愿望大多数中间件针对一切要求运转,然则您有一些前提件-特定中间件仅应针对某些要求运转。

这能够经由过程UseWhen轻松完成,UseWhen还运用谓词来肯定中间件是不是应当运转:

app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
    appBuilder.UseStatusCodePagesWithReExecute("/apierror/{0}");

    appBuilder.UseExceptionHandler("/apierror/500");
});

如许就能够经由过程挑选注册体式格局来本身掌握中间件。

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
在ASP.NET Core中编写及格的中间件

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282342.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>