网站服务器ip地址怎么查,软件开发合同范本免费下载,如何做app平台,扁平网站 文案原文:ASP.NET Web API 记录请求响应数据到日志的一个方法原文#xff1a;http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/ ASP.NET Web API 记录请求响应数据到日志的一个方法 REST风格的服务架构已经成为越来越多人的选择#xff0c;之前我用过WCF来实…原文: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过程中的一个小经验与大家分享。 后台服务通常需要记录一些运行记录如输入输出、请求信息、处理过程、响应信息等在以前记录请求数据和响应数据时我经常在具体的接口方法中处理如 /// 账户验证
/// lt;/summarygt;
/// lt;param nameinstancegt;lt;/paramgt;
/// lt;returnsgt;lt;/returnsgt;
public LoginResponse UserCheck(UserInfo instance)
{LogHelper.LogRequestlt;UserInfogt;(instance);var response InnerAPI.UserLogin(instance);LogHelper.LogResponselt;LoginResponsegt;(response);return response;
} LogHelper.LogRequest 用于记录请求的数据LogHelper.LogResponse用于记录返回的数据。 这样处理的话每个方法中都要重复如此记录不简洁不方便还处于复制代码的阶段。一直想改变去苦于没有思路。 某一天在博客园看到《ASP.NET Web API 处理架构》如获至宝。于是开始在Web API的生命周期中寻找可以截获到这些数据的点最终在官网上找到一篇文章《HTTP Message Handlers》参考其中的说明我重新构造了记录输入输出的方法 /// lt;summarygt;
/// 消息处理程序
/// lt;/summarygt;
public class CustomMessageHandler : DelegatingHandler
{/// lt;summarygt;/// 重写发送HTTP请求到内部处理程序的方法/// lt;/summarygt;/// lt;param namerequestgt;请求信息lt;/paramgt;/// lt;param namecancellationTokengt;取消操作的标记lt;/paramgt;/// lt;returnsgt;lt;/returnsgt;protected override Tasklt;HttpResponseMessagegt; 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).ContinueWithlt;HttpResponseMessagegt;((task) gt;{// 记录响应内容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成熟稳定。 喜欢的朋友赶紧试试吧。
相关文章: