Emi*_*nem 6 asp.net-mvc logging action
我需要能够记录从我的asp.net mvc应用程序调用的所有操作.如何以及实现这一目标的最佳方法是什么?在哪里我记录它是否是控制台或日志文件并不重要.
hey*_*ega 14
您可以创建自己的类,该类继承自ActionFilterAttribute,然后覆盖OnActionExecuting方法.
例
public class LogActionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var controller = filterContext.RequestContext.RouteData.Values["Controller"];
var action = filterContext.RequestContext.RouteData.Values["Action"];
//
// Perform logging here
//
base.OnActionExecuting(filterContext);
}
}
public class HomeController : Controller
{
[LogAction]
public ActionResult Index()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
感谢 HeyMega 的回答。下面是我在 MVC5 中实现的扩展实现的示例。
public class LogActionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var controller = filterContext.RequestContext.RouteData.Values.ContainsKey("Controller") ? filterContext.RequestContext.RouteData.Values["Controller"].ToString() : null;
var action = filterContext.RequestContext.RouteData.Values.ContainsKey("Action") ? filterContext.RequestContext.RouteData.Values["Action"].ToString() : null;
var area = filterContext.RequestContext.RouteData.DataTokens.ContainsKey("Area") ? filterContext.RequestContext.RouteData.DataTokens["Area"].ToString() : null;
var user = filterContext.RequestContext.HttpContext.User.Identity.GetUserId();
Task.Run(() => Generic().AreaActionLog(user, area, controller, action));
base.OnActionExecuting(filterContext);
}
}
Run Code Online (Sandbox Code Playgroud)
我选择将执行实际日志记录的方法分离到一个单独的进程中,如果数据库交互出现任何问题,或者数据库交互需要几秒钟,UI 不会中断。
然后,您可以使用属性来装饰整个控制器,[LogAction]
如下所示。
[LogAction]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Contact()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
或者通过装饰各个方法来选择性地应用该属性:
public class HomeController : Controller
{
[LogAction]
public ActionResult Index_Logs_Things()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
希望这对某人有帮助。
归档时间: |
|
查看次数: |
6987 次 |
最近记录: |