【问题标题】:Owin Call DurationOwin 通话时长
【发布时间】:2015-07-08 22:41:58
【问题描述】:

有没有简单的方法可以在 c# 中找到通话时长。

我正在使用 Owin 中间件拦截对 API 的调用并记录有关它们的信息,而我想要记录的部分内容是调​​用的持续时间。

public override async Task Invoke(IOwinContext context)
{
   var request = context.Request;
   var response = context.Response;
   var userName = request.User != null && request.User.Identity.IsAuthenticated ? request.User.Identity.Name : "No username";

   var entity = new TrackingEntity()
   {
      UserName = userName
   };

   // invoke the next middleware in the pipeline

   await Next.Invoke(context);

   WriteRequestHeaders(request, entity);
   WriteResponseHeaders(response, entity);

   await storage.InsertEntity(entity);
}

如果我的跟踪实体上有一个 Duration 字段来存储通话的时间长度,那么记录它的最佳方式是什么?

public TimeSpan Duration { get; set; }

使用在调用 next 之前开始并在之后结束的计时器是最准确的方法吗?

任何意见都将不胜感激,我想我只是想多了。

提前致谢。

【问题讨论】:

  • 编写一个过滤器并使用秒表计算花费的时间...使用反射检查响应中是否存在属性并进行相应设置
  • @entre 抱歉,我对 Owin 比较陌生。创建一个 owin 过滤器?还是 Asp.net 操作过滤器?

标签: c# owin middleware


【解决方案1】:

我认为您不需要创建计时器的开销,只需将开始时间记录到一个变量中,然后将结束时间记录在另一个变量中以设置持续时间。

var startTime = DateTime.Now;
await Next.Invoke(context);
var endTime = DateTime.Now;
Duration = endTime - startTime;

这有点乱,但如果你在这个中间件中所做的只是记录,你希望它很快,这应该符合要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    相关资源
    最近更新 更多