首页 > 解决方案 > 在 ASP NET Web API 中捕获用户上次请求时间戳

问题描述

我正在 ASP.NET Web API 生命周期中寻找一个好地方来更新我的用户实体中的一个属性,该属性旨在存储用户上次发出请求的日期和时间。显然,我可以将代码添加到我的每个 Controller 方法中,但我更愿意在我的控制器之外的一个地方执行此操作。

理想情况下,我可以访问 User 主体,并可以使用其 Identity 属性来获取用户的 ID,以便我可以使用 Entity Framework 检索和更新我的 User 实体。

我目前正在考虑使用 DelegatingHandler 实现。

谁能建议我应该在生命周期中执行此操作的位置?一个代码示例将不胜感激。

标签: c#entity-frameworkasp.net-web-api

解决方案


创建一个动作过滤器:

public class LogActionFilter : ActionFilterAttribute 
{
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        // Do your work
    }
}

是的,但我不是必须将 ActionFilter 添加到每个控制器方法吗?

不,您可以将其应用于控制器或操作。

或者,您可以执行以下操作,而不必将其应用于每个控制器(有点像全局过滤器):

[LogActionFilter ]
public class LogableApiController : ApiController
{
   ...
}

然后在任何你想要的地方继承它。

最后,另一种选择是通过找到 App_Start/FilterConfig.cs 添加到全局过滤器并添加:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new LogActionFilter());
}

因此,我向您展示了如何将其应用于动作级别、控制器级别、一个或多个控制器但不是所有控制器,然后如何将其应用于所有控制器(全局)。


推荐阅读