• <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 webapi通過中間件獲取請求和響應內容的方法

         更新時間:2019年09月17日 11:48:01   作者:微流   我要評論
        這篇文章主要介紹了.net core webapi通過中間件獲取請求和響應內容的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

        本文主要根據中間件來實現對.net core webapi中產生的請求和響應數據進行獲取并存入日志文件中;

        這里不詳細介紹日志文件的使用。你可以自己接入NLog,log4net,Exceptionless等

        創建接口記錄的中間件

        using Microliu.Core.Loggers;
        using Microsoft.AspNetCore.Builder;
        using Microsoft.AspNetCore.Http;
        using Microsoft.AspNetCore.Http.Internal;
        using Newtonsoft.Json;
        using System;
        using System.Collections.Generic;
        using System.Diagnostics;
        using System.IO;
        using System.Linq;
        using System.Text;
        using System.Threading.Tasks;
        namespace Ptibro.Partner.API.Extensions
        {
          public class RequestResponseLoggingMiddleware
          {
            private readonly RequestDelegate _next;
            private readonly ILogger _logger;
            private SortedDictionary<string, object> _data;
            private Stopwatch _stopwatch;
            public RequestResponseLoggingMiddleware(RequestDelegate next, ILogger logger)
            {
              _next = next;
              _logger = logger;
              _stopwatch = new Stopwatch();
            }
            public async Task Invoke(HttpContext context)
            {
              _stopwatch.Restart();
              _data = new SortedDictionary<string, object>();
              HttpRequest request = context.Request;
              _data.Add("request.url", request.Path.ToString());
              _data.Add("request.headers", request.Headers.ToDictionary(x => x.Key, v => string.Join(";", v.Value.ToList())));
              _data.Add("request.method", request.Method);
              _data.Add("request.executeStartTime", DateTimeOffset.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
              // 獲取請求body內容
              if (request.Method.ToLower().Equals("post"))
              {
                // 啟用倒帶功能,就可以讓 Request.Body 可以再次讀取
                request.EnableRewind();
                Stream stream = request.Body;
                byte[] buffer = new byte[request.ContentLength.Value];
                stream.Read(buffer, 0, buffer.Length);
                _data.Add("request.body", Encoding.UTF8.GetString(buffer));
                request.Body.Position = 0;
              }
              else if (request.Method.ToLower().Equals("get"))
              {
                _data.Add("request.body", request.QueryString.Value);
              }
              // 獲取Response.Body內容
              var originalBodyStream = context.Response.Body;
              using (var responseBody = new MemoryStream())
              {
                context.Response.Body = responseBody;
                await _next(context);
                _data.Add("response.body", await GetResponse(context.Response));
                _data.Add("response.executeEndTime", DateTimeOffset.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                await responseBody.CopyToAsync(originalBodyStream);
              }
              // 響應完成記錄時間和存入日志
              context.Response.OnCompleted(() =>
              {
                _stopwatch.Stop();
                _data.Add("elaspedTime", _stopwatch.ElapsedMilliseconds + "ms");
                var json = JsonConvert.SerializeObject(_data);
                _logger.Debug(json, "api", request.Method.ToUpper());
                return Task.CompletedTask;
              });
            }
            /// <summary>
            /// 獲取響應內容
            /// </summary>
            /// <param name="response"></param>
            /// <returns></returns>
            public async Task<string> GetResponse(HttpResponse response)
            {
              response.Body.Seek(0, SeekOrigin.Begin);
              var text = await new StreamReader(response.Body).ReadToEndAsync();
              response.Body.Seek(0, SeekOrigin.Begin);
              return text;
            }
          }
          /// <summary>
          /// 擴展中間件
          /// </summary>
          public static class RequestResponseLoggingMiddlewareExtensions
          {
            public static IApplicationBuilder UseRequestResponseLogging(this IApplicationBuilder app)
            {
              return app.UseMiddleware<RequestResponseLoggingMiddleware>();
            }
          }
        }

        在startup.cs中Configure方法中使用中間件

          public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
              if (env.IsDevelopment())
              {
                app.UseDeveloperExceptionPage();
              }
              app.UseErrorHandling();// 全局異常盡量放上面
              ...
              app.UseRequestResponseLogging();
              ...
              app.UseExceptionless(Configuration);
              app.UseMvc();
            }

        現在請求一次看一下記錄的效果:我的日志存在exceptionless上,如下圖

         解析json,記錄的數據如下:

        總結

        以上所述是小編給大家介紹的.net core webapi通過中間件獲取請求和響應內容的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
        如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

        相關文章

        最新評論

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