ASP.NETWebAPI记录请求响应数据到⽇志的⼀个⽅法ASP.NET Web API 记录请求响应数据到⽇志的⼀个⽅法
REST风格的服务架构已经成为越来越多⼈的选择,之前我⽤过WCF来实现REST服务,WCF是⼀个很强⼤的框架,⼲这点⼩事有点太沉重的感觉。后来微软⼜推出了⼀个,专门⽤来处理⼀些基本的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⽤于记录返回的数据。
这样处理的话,每个⽅法中都要重复如此记录,不简洁,不⽅便,还处于复制代码的阶段。⼀直想改变,去苦于没有思路。
某⼀天在博客园看到《》,如获⾄宝。于是开始在Web API的⽣命周期中寻可以截获到这些数据的点,最终在官⽹上到⼀篇⽂章《》,参考其中的说明,我重新构造了记录输⼊输出的⽅法:
/// <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());asp数据
}
protected void Application_Start(object sender, EventArgs e)
{
  Configure(GlobalConfiguration.Configuration);
}
DelegatingHandler使⽤委托模式,这样添加以后,程序就会执⾏CustomMessageHandler中重写的⽅法了。这样也算AOP了⼀下吧。
关于⽇志记录,推荐使⽤或,成熟稳定。
喜欢的朋友赶紧试试吧。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。