欧文通话时长

Owin Call Duration

在 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; }

使用在调用下一个之前开始并在之后结束的计时器的最准确方法是什么?

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

提前致谢。

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

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

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