用.net core实现反向代理中间件
最近在将一些项目的rest api迁移到.net core中,最开始是用的Nginx做反向代理,将已经完成切换的部分切入系统,如下图所示:
由于迁移过程中也在进行代码重构,需要经常比较频繁的测试,以保证能及时发现引入的问题。从而导致我们每迁移一部分都需要配置一次nginx的路由映射,保证迁移的功能能切入系统测试。
进行了一段时间后,发现经常配置Nginx一来比较麻烦,二来容易配错;便想将这个反向代理的功能放在.net core程序中去,实现如下的功能:
- Rest请求直接发往.net core程序
- 如果该请求在.net core程序中实现,则执行请求并返回
- 如果未实现,将其请求老版接口的数据,并返回结果。
形成如下的一个结构:
试了一下,在.net core中实现这个功能比较简单,加一个反向代理的中间件即可:
public class ReverseProxy{static HttpClient _http = new HttpClient();public static async Task Invoke(HttpContext context){var url = context.Request.Path.ToUriComponent();var uri = new Uri("http://localhost:8080/api" + url);var request = CopyRequest(context, uri);var remoteRsp = await _http.SendAsync(request);var rsp = context.Response;foreach (var header in remoteRsp.Headers){rsp.Headers.Add(header.Key, header.Value.ToArray());}rsp.ContentType = remoteRsp.Content.Headers.ContentType?.ToString();rsp.ContentLength = remoteRsp.Content.Headers.ContentLength;await remoteRsp.Content.CopyToAsync(rsp.Body);}static HttpRequestMessage CopyRequest(HttpContext context, Uri targetUri){var req = context.Request;var requestMessage = new HttpRequestMessage(){Method = new HttpMethod(req.Method),Content = new StreamContent(req.Body),RequestUri = targetUri,};foreach (var header in req.Headers){requestMessage.Content?.Headers.TryAddWithoutValidation(header.Key, header.Value.ToArray());}requestMessage.Headers.Host = targetUri.Host;return requestMessage;}}
View Code
使用起来也比较简单,放在Configure函数的最后面,直接使用Run来反向代理所有未被系统实现的请求即可。
app.Run(Middleware.ReverseProxy.Invoke);
这里我这只是一个比较简单的实现,大概就二三十行代码,也不是很完善,但试了一下,基本要的功能也都有,感兴趣的朋友可以将其完善下,这个功能本身也只是一个过渡期使用的功能,后续使用过程中如果有更新也会放上来。
转载于:https://www.cnblogs.com/TianFang/p/11503957.html
用.net core实现反向代理中间件相关推荐
- 彻底理解正向代理和反向代理
转载自 彻底理解正向代理和反向代理 平时工作中我们会接触到各种代理,它到底是什么概念呢,又是什么工作原理,下面我们具体来分析一下. 1.概念 正向代理 这个很好理解,比如说你现在要访问一个外国的社交网 ...
- ASP.NET Core 反向代理部署知多少
引言 最近在折腾统一认证中心,看到开源项目[IdentityServer4.Admin:https://github.com/skoruba/IdentityServer4.Admin]集成了Iden ...
- 【Asp.net Core】在 Linux 子系统中安装 nginx 并配置反向代理
上一篇鸟文中,老周已经介绍过在 Ubuntu 子系统中安装 dotnet-sdk 的方法,本文老周给大伙伴们说说安装 nginx 服务,并配置反向代理.同样,老周假设你从来没有用过 Linux,所以老 ...
- nodejs 中间件 反向代理 接口转发
背景 随着后端业务系统的增加,纵向需求不断扩展,一个业务系统已经无法满足需求了,衍生出多个业务系统,对外暴露的ip.端口就可能有多个,此时不方便外部接口调用,有些特殊行业客户出于安全性考虑不发提供多个 ...
- Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理
Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理 翻译来源:https://gitee.com/yunwisdoms/bloom Bloom是RES ...
- 中间件:Nginx工作使用记录(反向代理)
场景:SpringBoot+Vue前后端分离,用Nginx做反向代理. 一.Nginx.conf #定义Nginx运行的用户和用户组 user root; #进行增大并发连接数的处理 跟cpu保持一致 ...
- 彻底吃透Web服务器、容器、应用程序服务器与反向代理
出处:cnblogs.com/vipyoumay/p/7455431.html 我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难.有意思的是 Web 服务器/Web 容器/Web 应用程序服务器 ...
- YARP(Yet Another Reverse Proxy)是使用 .NET 构建的高度可定制的反向代理
点击上方蓝字 关注我们 (本文阅读时间:16分钟) YARP 1.0已经发布了,现在可以从 NuGet 下载.YARP(Yet Another Reverse Proxy)是使用 .NET 构建的高度 ...
- 配置nginx反向代理jira并实现https
摘要: 配置nginx反向代理jira并实现https 配置Tomcat 在本文中,我们设置可以在地址http://jira.aniu.so/jira(标准HTTP端口80)上访问JIRA,而JIRA ...
最新文章
- C# SVN检出的代码,F12显示从元数据
- 16.异常处理机制:exception
- wordpress ajax 注册,WordPress注册AJAX事件,前台后台代码演示视频教程 - 悠然自学网...
- codevs——2853 方格游戏(棋盘DP)
- CTF入门--http请求头
- 如何解包/编辑/打包boot.img文件
- python获取依赖包和安装依赖包
- 钳工下料软件_钳工。 更开心 更具生产力。 远程工作。
- service $anchorScroll
- 仿百度外卖的酷炫水波纹效果
- 商业画布是什么?有什么免费的模板和工具?
- wpf 聊天软件 wpf 聊天
- ESP 保姆级教程 疯狂传感器篇 —— 案例:ESP8266 + BME280 + 串口输出
- 微信好友保存在服务器,微信好友数据备份好,封号也不怕!
- sklearn setting an array element with a sequence.
- 测试用例(微信发朋友圈/评论/点赞/搜索/购物车)
- 咸鱼CAD笔记—编辑工具
- 工业互联网·制药设备远程监控运维维护平台
- 改进YOLO系列 | ICLR2022 | OMNI-DIMENSIONAL DYNAMIC CONVOLUTION: 全维动态卷积
- 我的世界服务器文件夹作弊,我的世界快速抓获作弊玩家 服主必看
热门文章
- KDD2018 阿里巴巴论文揭示自家大规模视觉搜索算法
- matlab 等势面立体图,求助大牛MATLAB画三维等势面
- php mysql博客构架_微博项目总结数据表
- 程序员,互联网创业者,忠言逆耳,希望创业者们慎重,三思而后行。
- 提取voc数据集中特定的类
- 天涯明月刀开发_《天涯明月刀手游》正式上线 4700万玩家期待的那个江湖来了...
- float php 运算_PHP面试经典题目
- 如何解决Macbook pro无法写入U盘的问题
- phpcms attachment.class.php路径,解决phpcms上传不了图片的方法
- 主板没有rgb接口怎么接灯_性价比稳定的RGB水冷散热器:乔思伯天使眼TW2-240测评...