原文:ASP.NET Web API 记录请求响应数据到日志的一个方法

原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/

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 记录请求响应数据到日志的一个方法相关推荐

  1. ASP.NET Core:从ASP.NET Web API迁移的多层数据服务应用程序

    目录 介绍 设置和运行示例应用程序 类库项目 依赖注入 访问应用程序设置 实体框架核心相关更改 主键标识插入问题 数据上下文和连接字符串 自定义存储库(Repositories) LINQ表达式翻新( ...

  2. ASP NET Web API 2框架揭秘

    ASP.NET Web API2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著   ISBN 978-7-121-23536-8 2014年7月出版 定价:108.00 ...

  3. ASP.NET Web API 基本操作(CRUD)

    上一篇介绍了ASP.NET Web API的基本知识和原理,这一篇我们通过一个更直观的实例,对产品进行CRUD操作(Create/Read/Update/Delete)来继续了解一下它的基本应用. 创 ...

  4. java调用asp.net webapi_通过HttpClient 调用ASP.NET Web API示例

    在前面两篇文章中我们介绍了ASP.NET Web API的基本知识和原理,并且通过简单的实例了解了它的基本(CRUD)操作.我们是通过JQuery和Ajax对Web API进行数据操作.这一篇我们来介 ...

  5. 监控系统简介(二):使用 App Metrics 在 ASP.NET Web API 中记录指标

    回顾 在<监控系统简介:使用 Prometheus 与 Grafana>一文中,我们了解了什么是监控系统,Prometheus 这一监控工具及它提供的数据类型.PromQL 以及 Graf ...

  6. 【ASP.NET Web API教程】5.2 发送HTML表单数据:URL编码的表单数据

    注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内容. 5.2 Sending HTML Form Data 5.2 发送HTML表单数据 本文引 ...

  7. 利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理

    在Asp.net Web API中,对业务数据的分页查询处理是一个非常常见的接口,我们需要在查询条件对象中,定义好相应业务的查询参数,排序信息,请求记录数和每页大小信息等内容,根据这些查询信息,我们在 ...

  8. ASP.NET MVC和ASP.NET Web API跨域请求问题解决方案【最全】

    无论是ASP.NET MVC和ASP.NET Web API跨域请求大致分成2种方式 第一种:web.config 配置 第二种:用HttpContext.Response.AppendHeader设 ...

  9. ASP.NET Web API 异常日志记录

    如果在 ASP.NET MVC 应用程序中记录异常信息,我们只需要在 Global.asax 的 Application_Error 中添加代码就可以了,比如: public class MvcApp ...

最新文章

  1. 这应该是你见过的最全前端下载总结
  2. windows2003 服务器安全配置的建议
  3. 泛架构之于外包IT工程
  4. 【研发管理】中国企业 VS 世界优秀企业在产品研发上差距(下)
  5. python调用kafka拉取数据失败_无法使用kafkapython从另一个容器向Kafka容器发出请求...
  6. 牛客题霸 [ 最长回文子串] C++题解/答案
  7. Kali渗透测试——WOL-E
  8. 深度学习2.0-神经网络
  9. JS 获取WEB请求路径
  10. python 给字符串加颜色
  11. 陈桥五笔,我再也不会下载了
  12. QEMU新的-nic选项
  13. linux上的两种可执行程序
  14. 四道Java基础题 你能对几道?
  15. Cannot get a text value from a numeric cell
  16. 用pe修改计算机ip地址,实现WinPE上网功能修改IP及DNS方法
  17. 关于DoEvents
  18. Linux从图形界面切换到文本界面快捷键不好用的解决方法
  19. 在java中如何输入_java如何输入
  20. HTTP学习笔记(适合初学)2

热门文章

  1. oracle 双引号替换,oracle - Oracle SQL-Loader在值中有效地处理内部双引号 - SO中文参考 - www.soinside.com...
  2. 读取当前linux进程内存_(笔记)Linux上的内存分配
  3. python流行趋势_Python流行度再创新高,学Python就从风变编程开始
  4. MKL学习——向量操作
  5. React-router总结
  6. 第96:SVM简介与简单应用
  7. 一个不错的MYSQL数据库备份类,PHP版,一个文件,精简版
  8. iOS WebView 加载本地资源(图片,文件等)
  9. Android 4.2 通知通过PendingIntent启动Activity失败的问题
  10. Retina时代的前端视觉优化