手机版

使用实现反向代理中间件的方法 净芯

时间:2021-08-20 来源:互联网 编辑:宝哥软件园 浏览:

最近,在一些项目的rest api迁移到。net core,一开始使用Nginx作为反向代理,将交换的部分切割到系统中,如下图所示:

因为代码重构也在迁移的过程中进行,所以需要频繁的测试来确保能够及时发现引入的问题。因此,我们需要在迁移的每一部分都配置一次nginx的路由映射,以确保迁移功能可以切入系统测试。

一段时间后发现频繁配置Nginx比较麻烦,其次容易错配;我想把这个反向代理的功能放在。net核心程序并实现以下功能:

休息请求直接发送到。net核心程序。如果请求是在。net核心程序,它将执行请求并返回它所请求的旧接口的数据(如果没有实现的话),并返回结果。结构形成如下:

试了一下,在中实现这个函数比较简单。net核心,并添加一个反向代理的中间件:

公共类reverse proxy { static Http client _ http=new Http client();公共静态异步任务调用(HttpContext上下文){ var url=context。request . path . touriscomponent();var URi=new URi(' http://localhost :8080/API ' URl);var request=CopyRequest(上下文,uri);var remoteRsp=await _ http。SendAsync(请求);var rsp=上下文。回应;foreach(remote RSP中的var标头。标头){ rsp。标题。添加(标题。钥匙,头。value . to array());} rsp。ContentType=remoteRsp。内容。标题。内容类型?ToString();rsp。ContentLength=remoteRsp。内容。标题。内容长度;等待remoteRsp。content . copy to sync(RSP。身体);}静态Httprequestmessage CopyRequest(HttpContext上下文,Uri targetUri) { var req=context。请求;var request message=new Httprequestmessage(){ Method=new HttpMethod(req。方法),内容=新流内容(请求。Body),RequestUri=targetUri,};请求中变量头。标头){ requestMessage。内容? headers . tryaddwithoutvalidation(标头。钥匙,头。value . to array());} requestMessage。标头。主机=目标Uri。主持人;返回requestMessage}}使用起来也比较简单,放在Configure函数的末尾,直接使用Run来反向代理系统没有实现的所有请求。

app。运行(中间件。reverse proxy . Invoke);在这里,我只是一个相对简单的实现,大概有二三十行代码,也不完美。不过试了一试,基本功能都有了,感兴趣的朋友可以改进一下。这个功能本身只是一个过渡功能,任何更新都会在后续的使用中进行。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。谢谢你的支持。

版权声明:使用实现反向代理中间件的方法 净芯是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。