我是整个MVC的新手,我正在考虑使用ASP.NET Web API重新实现一些WCF服务.作为其中的一部分,我想实现一个动作过滤器,记录所有动作和异常以及定时,所以我认为我会从动作过滤器开始,但是没有调用过滤器.
public class MyTrackingActionFilter : ActionFilterAttribute, IExceptionFilter
{
private Stopwatch stopwatch = new Stopwatch();
public void OnException(ExceptionContext filterContext)
{
...
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
...
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
this.stopwatch.Start();
Trace.TraceInformation(" Entering {0}", filterContext.RouteData);
}
}
Run Code Online (Sandbox Code Playgroud)
在控制器上,我有
[MyTrackingActionFilter]
public class MyResourceController : ApiController
{
...
}
Run Code Online (Sandbox Code Playgroud)
使用以下调用在Global.asax中设置路由:
var routeTemplate = ...
var defaults = new { controller = controllerName, action = methodName };
var constraints = new { httpMethod = new HttpMethodConstraint(myHTTPMethods.Split(',')) …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种更简洁的方法来将审计跟踪功能添加到现有的asp.net MVC和Web Api项目中,该项目包含数百个Controller和ApiController.
审计跟踪日志如下所示.基本上我只想登录In what time who did what这个功能.
UserID
ActionTime
Controller
Action
Run Code Online (Sandbox Code Playgroud)
我错过了什么?如果有 .请指正.谢谢.
目前我发现有一些方法可以做到这一点.
在中实现ActionFilterAttribute并编写自己的日志函数OnActionExecuting,然后使用此属性修饰所有操作.
Controller像BaseController所有存在的控制器一样实现基础.并写入登录OnActionExecuting.然后将所有控制器更改为继承BaseController.(如果是错的.请纠正我.谢谢.)
对于ApiController.实现一个DelegatingHandler来实现它.
对于1和2.我需要更改所有存在的代码来实现它.比如改变基类或用新属性装饰.考虑到我的情况,这将是一项艰苦的工作.因为需要改变数以千计的类或方法.我觉得它有点冗长.所以我想知道是否有一些像ApiController这样的干净方式来制作它.谢谢.