ASP.NET Core 开发-中间件(Middleware)

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

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

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

具体如图:

 

开发中间件(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 。

访问:http://localhost:5000/

成功运行。

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

原文地址:http://www.cnblogs.com/linezero/p/5529767.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高性能、高可用平台架构的演变过程

转载自 高性能、高可用平台架构的演变过程开篇概述 在如今移动互联网、互联网、大数据的时代&#xff0c;各类的互联网网站、平台异常突起&#xff0c;如同雨后春笋&#xff0c;有种“忽如一夜春风来&#xff0c;千树万树梨花开”感觉。 对于移动互联网时代的平台来说&#xff…

6 使用soap客户端_网络协议 20 - RPC 协议(上)- 基于XML的SOAP协议

上一节我们了解 RPC 的经典模型和设计要点&#xff0c;并用最早期的 ONC RPC 为例子&#xff0c;详述了具体的实现。而时代在进步&#xff0c;ONC RPC 逐渐因为各种问题被替代&#xff0c;SOAP 协议就是替代者之一。ONC RPC 存在的问题ONC RPC 将客户端要发送的参数&#xff0c…

关于HashMap容量的初始化,还有这么多学问

转载自 关于HashMap容量的初始化&#xff0c;还有这么多学问在《HashMap中傻傻分不清楚的那些概念》文章中&#xff0c;我们介绍了HashMap中和容量相关的几个概念&#xff0c;简单介绍了一下HashMap的扩容机制。文中我们提到&#xff0c;默认情况下HashMap的容量是16&#xff0…

Microservice Anti-patterns

在最近的一次Microservices Practitioner Summit中&#xff0c;原Netflix工程师介绍了一种越来越常见的对Microservice的误用。简单地说&#xff0c;大家在搭建一个基于Microservice的服务时常常依赖同一套类库&#xff0c;进而使得Microservice中的各个子服务无法选择最适合的…

css 图片换行_好程序员web前端学习路线分享CSS浮动-文档流篇

1、纯文本的排列。文档流就像我们的文本内容一样&#xff0c;所有的文字都会紧挨着&#xff0c;一个个排列下来&#xff0c;如果到了边界&#xff0c;就会换一行排列。当然如果敲回车或者按下空格键一般都会认为是一个词间距&#xff0c;因为英文中每个单词之间是有距离的&…

京东购物车的 Java 架构实现及原理

转载自 京东购物车的 Java 架构实现及原理 今天来写一下关于购物车的东西, 这里首先抛出四个问题: 1&#xff09;用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码  问&#xff1a;购物车商品还在吗&#xff1f; 2&#xff09;用户登陆了用户名密…

程序员求职面试三部曲之三:快速适应新的工作环境

新进一家公司总有各种的不适应&#xff0c;或兴奋&#xff0c; 或紧张&#xff0c;或不安&#xff0c;或迷茫各种情绪兼而有之。曾经有个家伙好不容易进了A公司&#xff0c;本来是要替代另一位即将离职的小伙伴的&#xff0c;结果&#xff0c;走得比那位兄弟还快&#xff0c;只…

问的书写规则是什么意思_化学式的定义及其书写规则

化学式的定义及其书写规则化学式是用元素符号表示纯净物组成及原子个数的式子。分子晶体的化学式叫做分子式&#xff0c;可以表示这种物质的分子构成。下面是百分网小编给大家整理的化学式的简介&#xff0c;希望能帮到大家!化学式的定义用元素符号表示纯净物组成及原子个数的式…

微软企业应用开发三大方向:跨平台、开放/开源与DevOps

软件和互联网正在改变传统企业&#xff0c;软件的职能逐渐从管理内部员工变成核心的商业竞争能力&#xff0c;在今天这种大环境下&#xff0c;我们应该用的新开发技术和方法。微软公司全球资深副总裁、开发平台事业部潘正磊&#xff08;Julia&#xff09;认为&#xff0c;把IT托…

Java程序员最常犯的 10 个错误

转载自 Java程序员最常犯的 10 个错误 这个列表总结了Java开发人员经常犯的10个错误。一 、把数组转成ArrayList 为了将数组转换为ArrayList&#xff0c;开发者经常会这样做&#xff1a; List list Arrays.asList(arr); 使用Arrays.asList()方法可以得到一个ArrayList&…

mysql5.1升级5.5_mysql数据库迁移,由版本5.1升级至5.5.29,需要注意哪些

caching_sha2_password认证插件提供更多的密码加密方式&#xff0c;并62616964757a686964616fe59b9ee7ad9431333433636131且在加密方面具有更好的表现&#xff0c;目前MySQL 8.0选用caching_sha2_password作为默认的认证插件&#xff0c;MySQL 5.7的认证插件是MySQL_native_pas…

dotnetConf 2016 线上虚拟大会

为期三天&#xff08;6月7日-9日&#xff09;的Channel9 免费.NET线上虚拟大会&#xff0c;微软产品团队及.NET社区精英一起徜徉在.NET的世界&#xff01; 与大咖Scott Hunter, Miguel de Icaza (Xamarin CTO) , ScottHanselman及其他.NET大牛一起学习如何利用.NET开发跨…

mysql的on和in用法_数据库中in、on、with的用法及示例。

with用法&#xff1a;创建一个表&#xff1a;create table regr (pid integer,id integer, name char(20))alter table regr alter id set not null add primary key(id)insert into regr values(-1,1,library),(1,2,news),(2,3,world news),(2,4,politics),(2,5,bussiness)(2,…

文档数据库RavenDB-介绍与初体验

不知不觉&#xff0c;“.NET平台开源项目速览“系列文章已经15篇了&#xff0c;每一篇都非常受欢迎&#xff0c;可能技术水平不高&#xff0c;但足够入门了。虽然工作很忙&#xff0c;但还是会抽空把自己知道的&#xff0c;已经平时遇到的好的开源项目分享出来。今天就给大家介…

双机热备的原理

转载自 双机热备的原理夜半惊魂 上次的文章《负载均衡的原理》中讲到&#xff0c;张大胖在Bill的指导下&#xff0c;成功地开发了一个四层的负载均衡软件&#xff0c; 把流量“均匀地”分发到了后面的几个服务器中&#xff0c; 获得了老板的1000块钱奖励。但是张大胖心中隐隐不…

c# 向mysql插入数据_C#连接mysql数据库 及向表中插入数据的方法

mysql 语句操作&#xff1a;创建数据库&#xff1a;create database hotelATMDb;use hotelATMDb;C#连接mysql1、引用 dll MySql.Data.dll 下载地址&#xff1a;http://download.csdn.net/detail/chen504390172/67461312、引用 using MySql.Data.MySqlClient;连接语句&#xff1…

微软CEO纳德拉开讲,2016微软开发者峰会在京召开

6月1日&#xff0c;2016微软开发者峰会在京召开。 来自微软总部的高层、技术大拿&#xff0c; 以及来自微软亚洲研究院、微软亚太研发集团、Xamarin 总部团队、微软中国开发体验及平台合作事业部的技术专家对各平台的开发进行技术探讨&#xff0c;向开发者展示了一系列引人入胜…

Linux下如何避免误操作执行 rm

转载自 Linux下如何避免误操作执行 rm最近IT圈子流行着一个段子&#xff1a;某个蠢萌的程序员&#xff0c;不小心在公司的服务器上输入了 rm -rf/ 指令&#xff0c;结果......现在还没出狱呢。当然&#xff0c;绝大部分程序员不可能犯下如此低级的错误&#xff0c;更何况也没有…

Consul入门

简介 为什么要用consul&#xff0c;这里就不详细介绍了&#xff0c;本文重点是Consul的搭建和使用过程。 Consul搭建 参考文献&#xff1a;http://tonybai.com/2015/07/06/implement-distributed-services-registery-and-discovery-by-consul/ 下载consul和consul UI 官方地址&…

Java Socket编程----通信是这样炼成的

转载自 Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的&#xff0c;其对网络提供了高度的支持&#xff0c;使得客户端和服务器的沟通变成了现实&#xff0c;而在网络编程中&#xff0c;使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的…