ASP.NET Web API 记录请求响应数据到日志的一个方法
2017-05-12 14:50
519 查看
原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/
今天这篇文章是使用ASP.NET Web API过程中的一个小经验,与大家分享。
后台服务通常需要记录一些运行记录,如输入输出、请求信息、处理过程、响应信息等,在以前记录请求数据和响应数据时,我经常在具体的接口方法中处理,如:
LogHelper.LogRequest 用于记录请求的数据,LogHelper.LogResponse用于记录返回的数据。
这样处理的话,每个方法中都要重复如此记录,不简洁,不方便,还处于复制代码的阶段。一直想改变,去苦于没有思路。
某一天在博客园看到《ASP.NET Web API 处理架构》,如获至宝。于是开始在Web API的生命周期中寻找可以截获到这些数据的点,最终在官网上找到一篇文章《HTTP Message Handlers》,参考其中的说明,我重新构造了记录输入输出的方法:
为了使消息处理进入我们自定义的消息处理程序,需要在Global.asax文件的Application_Start方法中,将CustomMessageHandler添加到MessageHandlers中:
DelegatingHandler使用委托模式,这样添加以后,程序就会执行CustomMessageHandler中重写的方法了。
这样也算AOP了一下吧。
关于日志记录,推荐使用log4net或NLog,成熟稳定。
喜欢的朋友赶紧试试吧。
ASP.NET Web API 记录请求响应数据到日志的一个方法
REST风格的服务架构已经成为越来越多人的选择,之前我用过WCF来实现REST服务,WCF是一个很强大的框架,干这点小事有点太沉重的感觉。后来微软又推出了一个ASP.NET Web API,专门用来处理一些基本的Http服务,即灵活又简单,推荐大家都看看。今天这篇文章是使用ASP.NET Web API过程中的一个小经验,与大家分享。
后台服务通常需要记录一些运行记录,如输入输出、请求信息、处理过程、响应信息等,在以前记录请求数据和响应数据时,我经常在具体的接口方法中处理,如:
/// 账户验证 /// </summary> /// <param name="instance"></param> /// <returns></returns> public LoginResponse UserCheck(UserInfo instance) { LogHelper.LogRequest<UserInfo>(instance); var response = InnerAPI.UserLogin(instance); LogHelper.LogResponse<LoginResponse>(response); return response; }
LogHelper.LogRequest 用于记录请求的数据,LogHelper.LogResponse用于记录返回的数据。
这样处理的话,每个方法中都要重复如此记录,不简洁,不方便,还处于复制代码的阶段。一直想改变,去苦于没有思路。
某一天在博客园看到《ASP.NET Web API 处理架构》,如获至宝。于是开始在Web API的生命周期中寻找可以截获到这些数据的点,最终在官网上找到一篇文章《HTTP Message Handlers》,参考其中的说明,我重新构造了记录输入输出的方法:
/// <summary> /// 消息处理程序 /// </summary> public class CustomMessageHandler : DelegatingHandler { /// <summary> /// 重写发送HTTP请求到内部处理程序的方法 /// </summary> /// <param name="request">请求信息</param> /// <param name="cancellationToken">取消操作的标记</param> /// <returns></returns> protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { // 记录请求内容 if (request.Content != null) { LogWriter.ToInfo(string.Format("请求Content:{0}", request.Content.ReadAsStringAsync().Result)); } // 发送HTTP请求到内部处理程序,在异步处理完成后记录响应内容 return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>( (task) => { // 记录响应内容 LogWriter.ToInfo(string.Format("响应Content:{0}", task.Result.Content.ReadAsStringAsync().Result)); return task.Result; } ); } }
为了使消息处理进入我们自定义的消息处理程序,需要在Global.asax文件的Application_Start方法中,将CustomMessageHandler添加到MessageHandlers中:
protected static void Configure(HttpConfiguration config) { config.MessageHandlers.Add(new CustomMessageHandler()); } protected void Application_Start(object sender, EventArgs e) { Configure(GlobalConfiguration.Configuration); }
DelegatingHandler使用委托模式,这样添加以后,程序就会执行CustomMessageHandler中重写的方法了。
这样也算AOP了一下吧。
关于日志记录,推荐使用log4net或NLog,成熟稳定。
喜欢的朋友赶紧试试吧。
相关文章推荐
- ASP.NET Web API 记录请求响应数据到日志的一个方法
- ASP.NET Web API 记录请求响应数据到日志的一个方法
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- asp.net 响应xml格式数据的请求
- ASP.NET Web API 异常日志记录
- asp.net下的“Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。”错误的一个可能的成因
- ASP.NET记录错误日志的实现方法
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- 一个反射方法响应web平台所有ajax数据请求,让web开发速度提高一倍
- asp.net web api 解决ajax跨站点post请求提交 json 数据问题
- 在ASP.NET 2.0中操作数据之五十四:添加新记录时包含一个文件上传选项
- 在asp.net web api 2 (ioc autofac) 使用 Serilog 记录日志
- 用一个最简单方法解决asp.net页面刷新导致数据的重复提交
- ASP.NET一个页面多个Button按钮事件避免数据验证控件RequiredFieldValidator冲突方法
- ASP.NET一个页面多个Button按钮事件避免数据验证控件RequiredFieldValidator冲突方法
- asp.net web api 解决ajax跨站点post请求提交 json 数据问题
- 在ASP.NET 2.0中操作数据之五十四:添加新记录时包含一个文件上传选项
- ASP.NET记录错误日志的实现方法
- 建立一个方法的attribute,可以放在任意方法上,可以自动记录方法出错时的信息,就不用写try 。。cacth. 【注意】 不是在asp.net MVC下,是在普通三层结构下写的的特性。