ASP.Net Web Api操作执行时间

时间:2015-08-05 23:31:12

标签: asp.net-web-api

我有几个web api动作方法,我想捕获执行开始时间和结束时间。我想使用ActionFilter的OnActionExecuting和OnActionExecuted方法我可以从集中的地方捕获它。想法是捕获执行开始时间并将其添加到响应头部OnActionExecuting方法。类似地捕获执行结束时间,并将其捕获到OnActionExecuted方法中的响应头。 现在问题在于" OnActionExecuting"它刚刚启动请求处理和响应对象没有初始化,我无法添加响应头。 为什么我要使用标题来做它: 在生产中,我将使用请求标头发送标志以在需要时捕获执行时间,而在其他时间它不会捕获这些细节。 我不想使用日志记录方法,而是使用http标头。我也不想在个别行动方法中编写此代码。 有没有我可以在某处存储执行开始时间的地方,我在OnActionExecuted方法中访问它并将其添加到响应头? 我使用了以下代码,但在OnActionExecuting中,Response对象为NULL。

public class TestFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        //Response is not initialized yet. Hence this wont work.  
        actionContext.Response.Headers.Add("StartTime", DateTime.Now.ToLongTimeString());
        base.OnActionExecuting(actionContext);
    }

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        actionExecutedContext.Response.Headers.Add("StartTime", DateTime.Now.ToLongTimeString());
        base.OnActionExecuted(actionExecutedContext);
    }
}

1 个答案:

答案 0 :(得分:2)

我找到了存储请求开始时间的方法。在OnActionExecuting方法中,我捕获开始时间并将其作为自定义属性存储在actionContext.Request.Properties上。我在OnActionExecuted方法中检索的存储值,并将其设置在Response标头上。认为对于正在寻找类似实现的人来说可能会有所帮助。