gpt4 book ai didi

c# - 在 Asp.net MVC 和 Web API 中实现审计跟踪的干净方法是什么

转载 作者:太空狗 更新时间:2023-10-29 22:15:51 26 4
gpt4 key购买 nike

我正在尝试寻找一种更简洁的方法来将审计跟踪功能添加到现有的 asp.net MVC 和 Web Api 项目中,该项目包含数百个 ControllerApiController .

审计跟踪日志如下所示。基本上我只想在这个函数中记录In when when who did what

UserID

ActionTime

Controller

Action

我错过了什么吗?如果有 。请纠正我。谢谢。

目前我发现有一些方法可以做到。

  1. 实现一个ActionFilterAttribute 并在OnActionExecuting 中编写我自己的日志函数,然后用这个属性装饰所有的 Action 。

  2. 为所有存在的 Controller 实现一个基础Controller,如BaseController。并在 OnActionExecuting 中写入日志。然后将所有 Controller 更改为继承自 BaseController。 (如有不妥请指正,谢谢)

  3. 对于 ApiController。实现一个 DelegatingHandler 来实现它。

对于 1 和 2。我需要更改所有现有代码才能实现。比如更改基类或用新属性装饰。考虑到我的情况,这将是一项艰苦的工作。因为需要更改数以千计的类或方法。我认为这有点冗长。所以我想知道 ApiController 是否有像 3 这样的干净方法来实现它。谢谢。

最佳答案

我发现使用全局操作过滤器是处理此类横切/面向方面问题的最佳方式。

请注意,此代码未经测试。

public class AuditFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var userName = HttpContext.Current.User.Identity.Name;
var time = DateTime.Now.ToString(CultureInfo.InvariantCulture);
var controllerName = actionContext.ControllerContext.ControllerDescriptor.ControllerName;
var actionName = actionContext.ActionDescriptor.ActionName

Logger.Log(string.Format("user: {0}, date: {1}, controller {2}, action {3}", userName, time, controllerName, actionName));
}
}

然后在您的应用程序启动管道的某处,全局注册过滤器:

GlobalConfiguration.Configuration.Filters.Add(new AuditFilter());

关于c# - 在 Asp.net MVC 和 Web API 中实现审计跟踪的干净方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32773482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com