c# - 在 ASP NET Web API 中捕获用户上次请求时间戳
问题描述
我正在 ASP.NET Web API 生命周期中寻找一个好地方来更新我的用户实体中的一个属性,该属性旨在存储用户上次发出请求的日期和时间。显然,我可以将代码添加到我的每个 Controller 方法中,但我更愿意在我的控制器之外的一个地方执行此操作。
理想情况下,我可以访问 User 主体,并可以使用其 Identity 属性来获取用户的 ID,以便我可以使用 Entity Framework 检索和更新我的 User 实体。
我目前正在考虑使用 DelegatingHandler 实现。
谁能建议我应该在生命周期中执行此操作的位置?一个代码示例将不胜感激。
解决方案
创建一个动作过滤器:
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());
}
因此,我向您展示了如何将其应用于动作级别、控制器级别、一个或多个控制器但不是所有控制器,然后如何将其应用于所有控制器(全局)。
推荐阅读
- python - 如何将 XML 转换为 XML 文件中缺少某些值的 CSV?
- python - VScode 无法解析的导入
- node.js - 保存到 mongDB 3 级嵌套对象数组
- scala - Scala - 映射到嵌套列表并在列表的每一级排序
- sql - OData EF Core 多自引用表
- javascript - 如何根据选择下拉项禁用文本框?
- python - 如何构造一个由离散二维空间中给定长度的所有路径组成的数组
- jquery - 我可以动态翻译来自 JSON 文件的一段字符串吗?
- php - 使用 mpdf 和 chart.js 创建 PDF
- php - 通过可选参数 Laravel 5.8,cron 作业