• <sub id="xcyjv"></sub><nav id="xcyjv"><code id="xcyjv"><meter id="xcyjv"></meter></code></nav>
      <nav id="xcyjv"></nav>
    1. <form id="xcyjv"><th id="xcyjv"></th></form><nav id="xcyjv"><mark id="xcyjv"></mark></nav>

        利用.net core實現反向代理中間件的方法

         更新時間:2019年09月11日 11:13:21   作者:天方   我要評論
        這篇文章主要給大家介紹了關于利用.net core實現反向代理中間件的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用.net core具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

        最近在將一些項目的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;
            }
          }

        使用起來也比較簡單,放在Configure函數的最后面,直接使用Run來反向代理所有未被系統實現的請求即可。

          app.Run(Middleware.ReverseProxy.Invoke);

        這里我這只是一個比較簡單的實現,大概就二三十行代碼,也不是很完善,但試了一下,基本要的功能也都有,感興趣的朋友可以將其完善下,這個功能本身也只是一個過渡期使用的功能,后續使用過程中如果有更新也會放上來。

        總結

        以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

        相關文章

        最新評論

        01彩票网app
      1. <sub id="xcyjv"></sub><nav id="xcyjv"><code id="xcyjv"><meter id="xcyjv"></meter></code></nav>
          <nav id="xcyjv"></nav>
        1. <form id="xcyjv"><th id="xcyjv"></th></form><nav id="xcyjv"><mark id="xcyjv"></mark></nav>
            忻州 | 桂林 | 仁寿 | 禹州 | 定州 | 六安 | 衡阳 | 宜都 | 大兴安岭 | 文山 | 泰安 | 九江 | 柳州 | 丽水 | 新余 | 澳门澳门 | 阿坝 | 湖北武汉 | 阿勒泰 | 沧州 | 绵阳 | 锡林郭勒 | 诸暨 | 怀化 | 广州 | 杞县 | 定州 | 吐鲁番 | 定安 | 开封 | 肥城 | 海丰 | 诸城 | 潮州 | 烟台 | 安吉 | 江苏苏州 | 铁岭 | 桐城 | 海拉尔 | 江西南昌 | 燕郊 | 上饶 | 东方 | 偃师 | 衡阳 | 包头 | 兴安盟 | 赵县 | 贺州 | 青州 | 聊城 | 南安 | 东台 | 六盘水 | 嘉善 | 温州 | 贵港 | 建湖 | 高雄 | 吉林长春 | 德州 | 运城 | 嘉峪关 | 新乡 | 乐平 | 济源 | 六盘水 | 齐齐哈尔 | 衡阳 | 鄂尔多斯 | 大连 | 宝应县 | 建湖 | 海门 | 黔西南 | 常州 | 克孜勒苏 | 泗洪 | 贺州 | 偃师 | 屯昌 | 巴中 | 山东青岛 | 那曲 | 昌吉 | 锦州 | 三门峡 | 海宁 | 厦门 | 大丰 | 鹰潭 | 天长 | 许昌 | 安阳 | 兴安盟 | 黔东南 | 邳州 | 晋中 | 江门 | 保定 | 顺德 | 柳州 | 黔西南 | 锡林郭勒 | 吉林长春 | 怒江 | 广元 | 柳州 | 咸阳 | 阿克苏 | 潜江 | 佳木斯 | 汝州 | 沭阳 | 日土 | 临海 | 五指山 | 来宾 | 余姚 | 丹阳 | 咸阳 | 咸阳 | 西双版纳 | 定西 | 长兴 | 六安 | 枣阳 | 汉川 | 白沙 | 曲靖 | 荆门 | 天长 | 台中 | 临沧 | 无锡 | 吉林长春 | 黄山 | 衢州 | 东阳 | 遂宁 | 汝州 | 滨州 | 象山 | 洛阳 | 灌南 | 定州 | 东方 | 深圳 | 四川成都 | 开封 | 张家界 | 保山 | 大连 | 宜宾 | 涿州 | 南京 | 陕西西安 | 张家界 | 宣城 | 南京 | 台中 | 张家界 | 宝鸡 | 商丘 | 锡林郭勒 | 南平 | 广元 | 南安 | 济南 | 垦利 | 黄冈 | 玉溪 | 山东青岛 | 铁岭 | 新余 | 通化 | 六安 | 霍邱 | 仙桃 | 金坛 | 金昌 | 喀什 | 松原 | 宜都 | 衡阳 | 廊坊 | 铜仁 | 黔西南 | 高密 | 红河 | 东方 | 那曲 | 定安 | 韶关 | 吉林长春 | 莒县 | 单县 | 泰安 | 海东 | 昭通 | 兴安盟 | 大连 | 扬州 | 曲靖 | 定州 | 河北石家庄 | 呼伦贝尔 | 吉安 | 四平 | 衡阳 | 海北 | 宁德 | 芜湖 | 双鸭山 | 江门 | 烟台 | 恩施 | 平潭 | 平潭 | 舟山 | 岳阳 | 五家渠 | 清远 | 长垣 | 伊春 | 宜春 | 灌南 | 防城港 | 日喀则 | 池州 | 武安 | 姜堰 | 崇左 | 潍坊 | 岳阳 | 江门 | 达州 | 邯郸 | 桂林 | 台南 | 东台 | 禹州 | 晋城 | 云南昆明 | 庆阳 | 临海 | 阳泉 | 常德 | 盐城 | 张家口 | 唐山 | 铜仁 | 怀化 | 廊坊 | 保定 | 鹤壁 | 宝应县 | 泸州 | 喀什 | 宜昌 | 寿光 | 燕郊 | 包头 | 佛山 | 岳阳 | 南充 | 江西南昌 | 天门 | 七台河 | 新沂 | 海西 | 滨州 | 绥化 | 清远 | 漯河 | 池州 | 绵阳 | 来宾 | 海丰 | 石嘴山 | 醴陵 | 海西 | 宁国 | 武夷山 | 果洛 | 佳木斯 | 承德 | 秦皇岛 | 阿坝 | 海丰 | 安阳 | 临汾 | 定西 | 铜陵 | 黔南 | 平顶山 | 宣城 | 濮阳 | 如东 | 鸡西 | 日土 | 如东 | 徐州 | 韶关 | 眉山 | 佛山 | 大丰 | 公主岭 | 巴彦淖尔市 | 广安 | 金坛 | 临沧 | 黄石 | 梧州 | 新沂 | 丹东 | 锡林郭勒 | 宁夏银川 | 甘孜 | 海西 | 南通 | 象山 | 广元 | 阜阳 | 宜宾 | 三亚 | 慈溪 | 芜湖 | 绵阳 | 临沂 | 寿光 | 那曲 | 日喀则 | 锡林郭勒 | 玉环 | 舟山 | 霍邱 | 曲靖 | 张家口 | 镇江 | 琼海 | 鹤壁 | 临汾 | 株洲 | 仁怀 | 馆陶 | 石狮 | 琼中 | 湖州 | 崇左 | 保定 | 郴州 | 怀化 | 深圳 | 萍乡 | 鸡西 | 枣阳 | 商丘 | 阿里 | 章丘 | 东营 | 临汾 | 青州 | 六盘水 | 泗洪 | 图木舒克 | 嘉峪关 | 晋城 | 儋州 | 德清 | 广元 | 福建福州 | 崇左 | 慈溪 | 荆门 | 攀枝花 | 攀枝花 | 安徽合肥 | 仙桃 | 黔南 | 牡丹江 | 邹平 | 咸宁 | 内江 | 平顶山 | 仁寿 | 南通 | 姜堰 | 黑龙江哈尔滨 | 汉川 | 许昌 | 吉林 | 单县 | 潮州 | 迪庆 | 大理 | 龙岩 | 海丰 | 淄博 | 基隆 | 钦州 | 宣城 | 德阳 | 改则 | 克拉玛依 | 黔南 | 青海西宁 | 武安 | 眉山 | 石嘴山 | 河源 | 顺德 | 漯河 | 黔西南 | 宁波 | 金华 | 武夷山 | 佳木斯 | 十堰 | 宜昌 | 赣州 | 益阳 | 那曲 | 万宁 | 玉林 | 苍南 | 象山 | 泸州 | 湖北武汉 | 河北石家庄 | 白银 | 鄂尔多斯 | 淮安 | 河源 | 宿州 | 张北 | 新沂 | 徐州 | 赤峰 | 商丘 | 诸暨 | 仁怀 | 滕州 | 四平 | 石河子 | 怒江 | 绵阳 | 哈密 | 临汾 | 柳州 | 抚州 | 三门峡 | 聊城 | 桐城 | 邢台 | 牡丹江 | 德清 | 六安 | 钦州 | 山东青岛 | 寿光 | 茂名 | 唐山 | 浙江杭州 | 深圳 | 燕郊 | 九江 | 辽宁沈阳 | 海丰 | 金昌 | 金华 | 台湾台湾 | 鞍山 | 贵州贵阳 | 禹州 | 海北 | 鹰潭 | 四川成都 | 涿州 | 营口 | 平顶山 | 泗洪 | 台南 | 山南 | 大丰 | 巢湖 | 海宁 | 六盘水 | 厦门 | 六安 | 平顶山 | 公主岭 | 琼中 | 普洱 | 大庆 | 西藏拉萨 | 邵阳 | 临汾 | 莱芜 | 珠海 | 呼伦贝尔 | 邯郸 | 辽宁沈阳 | 唐山 | 定州 | 四平 | 安徽合肥 | 舟山 | 绥化 | 湘西 | 东阳 | 泰州 | 三亚 | 鄂尔多斯 | 那曲 | 黔东南 | 醴陵 | 玉溪 | 乌兰察布 | 新乡 | 泰州 | 安阳 | 牡丹江 | 河北石家庄 | 黄山 | 鹤壁 | 商丘 | 桐城 | 黔西南 | 廊坊 | 扬中 | 广饶 | 金华 | 龙口 | 济南 | 自贡 | 庄河 | 广饶 | 嘉善 | 海南 | 武夷山 | 永州 | 长兴 | 霍邱 | 金昌 | 海东 | 泉州 | 醴陵 | 象山 | 马鞍山 | 安吉 | 定西 | 齐齐哈尔 | 台中 | 安康 | 铁岭 | 包头 | 连云港 | 双鸭山 | 黄山 | 朝阳 | 渭南 | 辽源 | 临沧 | 阜阳 | 福建福州 | 澳门澳门 | 如东 | 邯郸 | 德阳 | 琼中 | 玉溪 | 延安 | 定州 | 吉林 | 锦州 | 朔州 | 阿里 | 莱州 | 桐乡 | 泰州 | 池州 | 东莞 | 邯郸 | 塔城 | 铁岭 | 阿拉尔 | 衡阳 | 三沙 | 怒江 | 廊坊 | 蚌埠 | 荆州 | 台南 | 吴忠 | 溧阳 | 宝鸡 | 随州 | 南通 | 德州 | 曹县 | 汝州 | 惠东 | 温岭 | 承德 | 宁德 | 芜湖 | 郴州 | 淮安 | 赵县 | 长治 | 阿里 | 咸阳 | 醴陵 | 佳木斯 | 永新 | 青州 | 厦门 | 甘孜 | 雅安 | 六盘水 | 唐山 | 台山 | 吐鲁番 | 晋城 | 神木 | 天水 | 丽水 | 吉林长春 | 赣州 | 巴彦淖尔市 | 燕郊 | 昭通 | 克孜勒苏 | 张家口 | 保亭 | 福建福州 | 日土 | 宁波 | 定安 | 萍乡 | 玉树 | 巴彦淖尔市 | 偃师 | 海门 | 东方 | 建湖 | 邢台 | 黑河 | 陇南 | 济南 | 定西 | 武威 | 昆山 | 邵阳 | 甘肃兰州 | 塔城 | 兴安盟 | 乌兰察布 | 新泰 | 台北 | 黄石 | 延安 | 仁怀 | 咸宁 | 佛山 | 贵州贵阳 | 大连 | 邯郸 | 和田 | 桐乡 | 黄冈 | 湘潭 | 灵宝 | 武安 | 邯郸 | 三亚 | 遵义 | 昭通 | 黄南 | 呼伦贝尔 | 宿州 | 肥城 | 仁怀 | 商洛 | 嘉善 | 迪庆 | 武威 | 佳木斯 | 张北 | 新余 | 永州 | 玉溪 | 益阳 | 河源 | 临海 | 铜陵 | 白山 | 山西太原 | 莒县 | 攀枝花 | 雄安新区 | 张家界 | 黑龙江哈尔滨 | 东营 | 灵宝 | 白城 | 莒县 | 贵州贵阳 | 七台河 | 滁州 | 泉州 | 德阳 | 阳春 | 铜仁 | 桓台 | 济南 | 邹城 | 南阳 | 营口 | 五家渠 | 佛山 | 定西 | 仁怀 | 文山 | 宿州 | 云南昆明 | 芜湖 | 林芝 | 遂宁 | 那曲 | 崇左 | 那曲 | 阳泉 | 商洛 | 铁岭 | 四川成都 | 荣成 | 如东 | 泉州 | 台湾台湾 | 锡林郭勒 | 长垣 | 信阳 | 黑河 | 雄安新区 | 咸阳 | 邹城 | 汕尾 | 昆山 | 启东 | 钦州 | 安庆 | 禹州 | 宁德 | 梧州 | 云南昆明 | 明港 | 商洛 | 阿克苏 | 新泰 | 乐平 | 海南海口 | 邹城 | 延安 | 无锡 | 图木舒克 | 湖南长沙 | 阿拉尔 | 蚌埠 | 海门 | 景德镇 | 楚雄 | 钦州 | 济南 | 焦作 | 怒江 | 黔东南 | 自贡 | 陕西西安 | 新乡 | 资阳 | 莆田 | 日土 | 东海 | 辽阳 | 宝鸡 | 喀什 | 武安 | 琼中 | 阜新 | 滁州 | 徐州 | 黄山 | 醴陵 | 宁国 | 迪庆 | 普洱 | 榆林 | 中卫 | 余姚 | 保亭 | 白山 | 晋中 | 景德镇 | 广汉 | 台湾台湾 | 吴忠 | 贵州贵阳 | 南安 | 安康 | 阜阳 | 潍坊 | 图木舒克 | 嘉峪关 | 简阳 | 云浮 | 永州 | 天长 | 锡林郭勒 | 景德镇 | 贵州贵阳 | 佛山 | 临沂 | 咸宁 | 常德 | 东台 | 天水 | 黄山 | 蓬莱 | 鹰潭 | 内蒙古呼和浩特 | 乌海 | 莱芜 | 清徐 | 泸州 | 潜江 | 梧州 | 阳泉 | 张北 | 醴陵 | 衡阳 | 枣庄 | 铜川 | 保亭 | 呼伦贝尔 | 武威 | 驻马店 | 那曲 | 新泰 | 南通 | 东海 | 马鞍山 | 辽源 | 青海西宁 | 丹东 | 青海西宁 | 山南 | 诸城 | 大兴安岭 | 那曲 | 镇江 | 永康 | 南充 | 株洲 | 博罗 | 安顺 | 牡丹江 | 张家口 | 漳州 | 启东 | 玉环 | 桐城 | 长兴 | 石嘴山 | 庆阳 | 咸阳 | 衢州 | 德州 | 长葛 | 宝应县 | 崇左 | 晋中 | 牡丹江 | 单县 | 锦州 | 昆山 | 章丘 | 新余 | 琼中 | 徐州 | 巴彦淖尔市 | 巢湖 | 盘锦 | 唐山 | 莆田 | 丹东 | 宝应县 | 洛阳 | 宜都 | 甘孜 | 安吉 | 长治 | 克孜勒苏 | 库尔勒 | 齐齐哈尔 | 鸡西 | 南通 | 衡水 | 长兴 | 广州 | 中卫 | 六盘水 | 漯河 | 丹东 | 咸宁 | 宁德 | 甘孜 | 湖南长沙 | 宁国 | 铜陵 | 顺德 | 大连 | 象山 | 随州 | 池州 | 芜湖 | 莒县 | 温州 | 广饶 | 乐平 | 广安 | 福建福州 | 朔州 | 高雄 | 湖南长沙 | 牡丹江 | 玉林 | 鄂州 | 铁岭 | 文山 | 平凉 | 上饶 | 珠海 | 鹰潭 | 乳山 | 果洛 | 简阳 | 保定 | 台湾台湾 | 萍乡 | 唐山 | 陵水 | 平潭 | 玉环 | 沭阳 | 扬州 | 垦利 | 玉林 | 桐乡 | 内江 | 武威 | 百色 | 渭南 | 扬中 | 九江 | 咸宁 | 陕西西安 | 鞍山 | 葫芦岛 | 金昌 | 聊城 | 辽源 | 丹阳 | 昌吉 | 肇庆 | 绍兴 | 库尔勒 | 宜春 | 仁寿 | 抚州 | 玉树 | 长垣 | 伊春 | 七台河 | 柳州 | 济南 | 宜春 | 台南 | 伊犁 | 上饶 | 郴州 | 芜湖 | 济宁 | 杞县 | 驻马店 | 朝阳 | 伊春 | 龙口 | 包头 | 毕节 | 柳州 | 玉溪 | 玉环 | 顺德 | 承德 | 新沂 | 中卫 | 海南海口 | 芜湖 | 象山 | 伊犁 | 许昌 | 商丘 | 甘肃兰州 | 临夏 | 三沙 | 自贡 | 河池 | 焦作 | 琼中 | 丹东 | 清徐 | 三沙 | 新乡 | 吐鲁番 | 绵阳 | 汕头 | 双鸭山 | 温岭 | 大庆 | 莱芜 | 新乡 | 山西太原 | 宜春 | 曲靖 | 威海 | 绥化 | 绍兴 | 馆陶 | 铜陵 | 清远 | 宝鸡 | 淄博 | 大庆 | 四平 | 攀枝花 | 福建福州 | 韶关 | 博罗 | 马鞍山 | 定州 | 清徐 | 基隆 | 四平 | 五指山 | 南京 | 武安 | 德宏 | 大丰 | 白沙 | 单县 | 保定 | 江苏苏州 | 咸阳 | 象山 | 天水 | 丽水 | 忻州 | 淄博 | 双鸭山 | 白沙 | 泰兴 | 新乡 | 嘉峪关 | 徐州 | 潜江 | 双鸭山 | 河池 |