net core支持中间件开发吗

来源:互联网  责任编辑:小易  

楼梯,可以说是跃层结构住宅的精灵。一套普普通通的住宅可以因为具有一座画龙点睛的楼梯而显得气宇轩昂,灵气逼人。先上几个美图:\n\n\n\n\n\n\n\n\n这些楼梯是不是很漂亮呢?是不是很喜欢呢?今天我们就来探究一下这些楼梯是怎么做出来的,在我们自建房别墅中该如何应用——\n我们传统的楼梯只有实用功能,一般也就藏在角落里,而我们看电视电影,那些国外的楼梯很显眼,而且非常地漂亮,我们盖如何才能拥有呢?简单来讲,有2种做法一种是混凝土现浇,这个施工难度高,非常费工,纯属技术活,一般的施工队对它都是望而生畏。另一种是买现成的预制楼梯,这种楼梯一般是工厂预制好的,直接买来就能装。但是预制楼梯有一个弊

本网有用户碰到这样的问题:net core支持中间件开发吗,本网根据需求用户需求,为用户寻得以下其他网友提供的解决方法,方法仅供参考,具体如下:

用户提供的解决方案1:

社会上有这样的一群人,他们追求新潮,性格独立,具有理性且务实的消费观,对个性的需求永不满足,没经历过历史和政治上的动荡,加上计划生育政策的影响,使他们稍显浮躁,他们绝大部分都是独生子女,综上所述这个群体就是大家口中的90后。不是讲车么,怎么说到人了?因为题主就是一位年轻的90后啊,蒙迪欧这款车适不适合90后?我们一起来看看~2017款福特蒙迪欧的前进气隔栅、头灯和进气口造型都有了新的变化,使车辆造型更加符合年轻人的审美要求,运动版还搭载了后扰流器和双侧双出尾排,的确非常漂亮。相比同级别竞争对手,新款蒙迪欧车身尺寸也不落下风。新款蒙迪欧仪表盘不属于惊艳的类型,但是精致感有所体现,功能也比较丰富,

ASP.NET Core开发,开发并使用中间件(Middleware)。

都说马自达好,为什么买的人那么少?逛遍汽车网站和汽车论坛,凡是谈起几个关键词:运动、外观、操控、好开……,我都会发现,无论是水军还是喷子,无论是真爱粉还是一生黑,此时此刻的他们都是遇山开路,逢水搭桥,异口同声的夸赞一个日系的牌子-马自达。看回马自达这个品牌,出身卑微(做低端三轮车起家的),对比起他们国的其他汽车品牌,并没有本田大法这种上来就是走军工路线背景,也没有丰田那样足够吹嘘一辈子的企业管理体系,说通俗点就是屌丝中的战斗机。那既然是屌丝出身,没有背景的马自达是如何让上文所说的那群人,从互相厮杀到同一条船的呢?以下的这些论证可能不完整,但是也可大致明白马自达圈粉无数的原因了:转子发动机说到转

中间件是被组装成一个应用程序管道来处理请求和响应的软件组件。

衣服发霉怎么办?用上这几招,瞬间变干净!不花大价钱,不花大力气轻松去除衣服顽固霉斑▼纯棉衣服豆芽去霉斑对于纯棉衣服上的霉斑,可用几根绿豆芽,在有霉斑的地方反复揉搓,然后用清水漂洗,霉点就除掉了。因为豆芽里有大量的蛋白质和维生素C,可以充分的分解霉菌。呢绒衣服汽油去霉斑先把衣服放在阳光下晒干,千万不要直接曝晒,要在衣物上罩白布,然后用刷子将霉点轻轻刷掉。如果衣服因油渍,汗渍而引起发霉,可以用软毛刷蘸些汽油在有霉点的地方反复刷洗,然后用干净的毛巾反复擦几遍,放在通风处晾干。皮革衣服肥皂水去霉斑可先用毛巾蘸些肥皂水反复擦拭,去污后立即用清水漂洗,晒干后再涂上夹克油。浅色系的衣物淘米水去霉斑可用淘米水

每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组分在管道中调用之后执行特定操作。

具体如图:

开发中间件(Middleware)

今天我们来实现一个记录ip 的中间件。

1.新建一个asp.net core项目,选择空的模板。

然后为项目添加一个 Microsoft.Extensions.Logging.Console

NuGet 命令行 ,请使用官方源。

Install-Package Microsoft.Extensions.Logging.Console -Pre

2.新建一个类: RequestIPMiddleware.cs

复制代码

public class RequestIPMiddleware

{

private readonly RequestDelegate _next;

private readonly ILogger _logger;

public RequestIPMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)

{

_next = next;

_logger = loggerFactory.CreateLogger<RequestIPMiddleware>();

}

public async Task Invoke(HttpContext context)

{

_logger.LogInformation("User IP: " + context.Connection.RemoteIpAddress.ToString());

await _next.Invoke(context);

}

}

复制代码

3.再新建一个:RequestIPExtensions.cs

复制代码

public static class RequestIPExtensions

{

public static IApplicationBuilder UseRequestIP(this IApplicationBuilder builder)

{

return builder.UseMiddleware<RequestIPMiddleware>();

}

}

复制代码

这样我们就编写好了一个中间件。

使用中间件(Middleware)

1.使用

在 Startup.cs 添加 app.UseRequestIP()

复制代码

public void Configure(IApplicationBuilder app, ILoggerFactory loggerfactory)

{

loggerfactory.AddConsole(minLevel: LogLevel.Information);

app.UseRequestIP();//使用中间件

app.Run(async (context) =>

{

await context.Response.WriteAsync("Hello World!");

});

}

复制代码

然后运行程序,我选择使用Kestrel 。

访问:/localhost:5000/

成功运行。

这里我们还可以对这个中间件进行进一步改进,增加更多的功能,如限制访问等。

用户提供的解决方案2:

中间件可以理解为一些通用的软件服务 或 软件接口, 所以是不分语言的, 最简单的比如你封装了一个SqlHelper类,简化了所有C#对数据库的访问操作等 本回答被提问者采纳

用户提供的解决方案3:

不支持

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

终于知道什么情况下需要实现.NET Core中的IOptions接口

我们所说的ApplicationBuilder是对所有实现了IApplicationBuilder接口的所有类型及其对象的统称。注册到WebHostBuilder上的启动类型具有一个用于管道定值的Configure方法,它利用作为参数的ApplicationBuilder对象进行中间件的注册。由于ApplicationBuilder与组成管道的中间件具有直接的关系,所以我们得先来说说中间件在管道中究竟体现为一个怎样的对象。中间件在请求处理流程中体现为一个类型为Func的委托对象,对于很多刚刚接触请求处理管道的读者朋友们来说,可能一开始对此有点难以理解,所以容来略作解释。我们上面已经提到过RequestDelegate这么一个委托,它相当于一个Func对象,该委托对象表示针对提供的HttpContext所做进行一项处理操作,这项操作代表某个中间件针对请求的处理。那为何我们不直接用一个RequestDelegate对象来表示一个中间件,而将它表示成一个Func对象呢?在大部分应用中,我们会针对具体的请求处理需求注册多个不同的中间件,这些中间件按照注册时间的先后顺序进行排列进而构成我们所谓的请求处理管道。对于某个中间件来说,在它完成了自身的请求处理任务之后,需要将请求传递给下一个中间件作后续的处理。Func中作为输入参数的RequestDelegate对象代表一个委托链,体现了后续中间件对请求的处理,当前中间件将自身实现的请求处理任务添加到这个委托链中,而返回RequestDelegate对象代表最新的委托链。以右图所示的管道为例,如果用一个Func来表示中间件B,那么作为输入参数的RequestDelegate对象代表的是C对请求的处理操作,而返回值则代表B和C先后对请求处的处理操作。如果一个Func代表第一个从服务器接收请求的中间件(比如A),那么执行该委托对象返回的RequestDelegate实际上体现了整个管道对请求的处理。在对中间件有了充分的了解之后,我们来看看用于注册中间件的IApplicationBuilder接口的定义。如下所示的是经过裁剪后的IApplicationBuilder接口的定义,我们只保留了两个核心的方法,其中Use方法实现了针对中间件的注册,另一个Build方法则将所有注册的中间件转换成一个RequestDelegate对象。1:publicinterfaceIApplicationBuilder2:{3:RequestDelegateBuild();4:IApplicationBuilderUse(Funcmiddleware);5:}从编程便利性考虑,很多预定义的中间件都具有用于注册的扩展方法,比如我们调用扩展方法UseStaticFiles来注册处理静态文件请求的中间件。对于我们演示的发布图片的应用来说,它也是通过调用一个具有如下定义的扩展方法UseImages来注册处理图片请求的中间件。1:publicstaticclassApplicationBuilderExtensions2:{3:publicstaticIApplicationBuilderUseImages(thisIApplicationBuilderapp,stringdirectory)4:{5:Funcmiddleware=next=>6:{7:returncontext=>8:{9:stringfileName=context.Request.Url.LocalPath.TrimStart('/');10:if(string.IsNullOrEmpty(Path.GetExtension(fileName)))11:{12:fileName+=".jpg";13:}14:fileName=Path.Combine(directory,fileName);15:context.Response.WriteFile(fileName,"image/jpg");16:returnnext(context);17:};18:};19:returnapp.Use(middleware);20:}21:}ASP.NETCore默认使用的是一个类型为ApplicationBuilder的对象来注册中间件,我们采用如下的代码片断来模拟它的实现逻辑。我们采用一个List>对象来存放所有注册的中间件,并调用Aggregate方法将它转换成一个RequestDelegate对象。1:publicclassApplicationBuilder:IApplicationBuilder2:{3:privateIList>middlewares=newList>();4:5:publicRequestDelegateBuild()6:{7:RequestDelegateseed=context=>Task.Run(()=>{});8:returnmiddlewares.Reverse().Aggregate(seed,(next,current)=>current(next));9:}10:11:publicIApplicationBuilderUse(Funcmiddleware)12:{13:middlewares.Add(middleware);14:returnthis;15:}16:}ASP.NETCore并不会直接创建ApplicationBuilder对象来注册中间件,而是利用对应的工厂来创建它。创建爱你ApplicationBuilder的工厂通过接口IApplicationBuilderFactory表示,在模拟的管道中我们将这个接口简化成如下的形式,该接口的默认实现者ApplicationBuilderFactory会直接创建一个ApplicationBuilder类型的对象。1:publicinterfaceIApplicationBuilderFactory2:{3:IApplicationBuilderCreateBuilder();4:}5:6:publicclassApplicationBuilderFactory:IApplicationBuilderFactory7:{8:publicIApplicationBuilderCreateBuilder()9:{10:returnnewApplicationBuilder();11:}12:}

  • 本文相关:
  • net core支持中间件开发吗
  • 终于知道什么情况下需要实现.NET Core中的IOptions接口
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved