最近在将一些项目的rest api迁移到.net core中,最开始是用的Nginx做反向代理,将已经完成切换的部分切入系统,如下图所示:

由于迁移过程中也在进行代码重构,需要经常比较频繁的测试,以保证能及时发现引入的问题。从而导致我们每迁移一部分都需要配置一次nginx的路由映射,保证迁移的功能能切入系统测试。

进行了一段时间后,发现经常配置Nginx一来比较麻烦,二来容易配错;便想将这个反向代理的功能放在.net core程序中去,实现如下的功能:

  1. Rest请求直接发往.net core程序
  2. 如果该请求在.net core程序中实现,则执行请求并返回
  3. 如果未实现,将其请求老版接口的数据,并返回结果。

形成如下的一个结构:

试了一下,在.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. 彻底理解正向代理和反向代理

    转载自 彻底理解正向代理和反向代理 平时工作中我们会接触到各种代理,它到底是什么概念呢,又是什么工作原理,下面我们具体来分析一下. 1.概念 正向代理 这个很好理解,比如说你现在要访问一个外国的社交网 ...

  2. ASP.NET Core 反向代理部署知多少

    引言 最近在折腾统一认证中心,看到开源项目[IdentityServer4.Admin:https://github.com/skoruba/IdentityServer4.Admin]集成了Iden ...

  3. 【Asp.net Core】在 Linux 子系统中安装 nginx 并配置反向代理

    上一篇鸟文中,老周已经介绍过在 Ubuntu 子系统中安装 dotnet-sdk 的方法,本文老周给大伙伴们说说安装 nginx 服务,并配置反向代理.同样,老周假设你从来没有用过 Linux,所以老 ...

  4. nodejs 中间件 反向代理 接口转发

    背景 随着后端业务系统的增加,纵向需求不断扩展,一个业务系统已经无法满足需求了,衍生出多个业务系统,对外暴露的ip.端口就可能有多个,此时不方便外部接口调用,有些特殊行业客户出于安全性考虑不发提供多个 ...

  5. Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理

    Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理 翻译来源:https://gitee.com/yunwisdoms/bloom Bloom是RES ...

  6. 中间件:Nginx工作使用记录(反向代理)

    场景:SpringBoot+Vue前后端分离,用Nginx做反向代理. 一.Nginx.conf #定义Nginx运行的用户和用户组 user root; #进行增大并发连接数的处理 跟cpu保持一致 ...

  7. 彻底吃透Web服务器、容器、应用程序服务器与反向代理

    出处:cnblogs.com/vipyoumay/p/7455431.html 我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难.有意思的是 Web 服务器/Web 容器/Web 应用程序服务器 ...

  8. YARP(Yet Another Reverse Proxy)是使用 .NET 构建的高度可定制的反向代理

    点击上方蓝字 关注我们 (本文阅读时间:16分钟) YARP 1.0已经发布了,现在可以从 NuGet 下载.YARP(Yet Another Reverse Proxy)是使用 .NET 构建的高度 ...

  9. 配置nginx反向代理jira并实现https

    摘要: 配置nginx反向代理jira并实现https 配置Tomcat 在本文中,我们设置可以在地址http://jira.aniu.so/jira(标准HTTP端口80)上访问JIRA,而JIRA ...

最新文章

  1. C# SVN检出的代码,F12显示从元数据
  2. 16.异常处理机制:exception
  3. wordpress ajax 注册,WordPress注册AJAX事件,前台后台代码演示视频教程 - 悠然自学网...
  4. codevs——2853 方格游戏(棋盘DP)
  5. CTF入门--http请求头
  6. 如何解包/编辑/打包boot.img文件
  7. python获取依赖包和安装依赖包
  8. 钳工下料软件_钳工。 更开心 更具生产力。 远程工作。
  9. service $anchorScroll
  10. 仿百度外卖的酷炫水波纹效果
  11. 商业画布是什么?有什么免费的模板和工具?
  12. wpf 聊天软件 wpf 聊天
  13. ESP 保姆级教程 疯狂传感器篇 —— 案例:ESP8266 + BME280 + 串口输出
  14. 微信好友保存在服务器,微信好友数据备份好,封号也不怕!
  15. sklearn setting an array element with a sequence.
  16. 测试用例(微信发朋友圈/评论/点赞/搜索/购物车)
  17. 咸鱼CAD笔记—编辑工具
  18. 工业互联网·制药设备远程监控运维维护平台
  19. 改进YOLO系列 | ICLR2022 | OMNI-DIMENSIONAL DYNAMIC CONVOLUTION: 全维动态卷积
  20. 我的世界服务器文件夹作弊,我的世界快速抓获作弊玩家 服主必看

热门文章

  1. KDD2018 阿里巴巴论文揭示自家大规模视觉搜索算法
  2. matlab 等势面立体图,求助大牛MATLAB画三维等势面
  3. php mysql博客构架_微博项目总结数据表
  4. 程序员,互联网创业者,忠言逆耳,希望创业者们慎重,三思而后行。
  5. 提取voc数据集中特定的类
  6. 天涯明月刀开发_《天涯明月刀手游》正式上线 4700万玩家期待的那个江湖来了...
  7. float php 运算_PHP面试经典题目
  8. 如何解决Macbook pro无法写入U盘的问题
  9. phpcms attachment.class.php路径,解决phpcms上传不了图片的方法
  10. 主板没有rgb接口怎么接灯_性价比稳定的RGB水冷散热器:乔思伯天使眼TW2-240测评...