using Microsoft.AspNetCore.Mvc.Filters; namespace SHH.CameraSdk; public class UserActionFilter : IActionFilter { // 静态锁,防止多线程同时写文件报错 private static readonly object _logLock = new object(); public void OnActionExecuted(ActionExecutedContext context) { // 只记录非 GET 请求(即修改性质的操作) if (context.HttpContext.Request.Method != "GET") { try { var user = context.HttpContext.Connection.RemoteIpAddress?.ToString() ?? "Unknown"; var path = context.HttpContext.Request.Path; var method = context.HttpContext.Request.Method; var time = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); var logLine = $"{time} | IP: {user} | {method} {path}"; lock (_logLock) { // 追加写入到运行目录下的 user_actions.log File.AppendAllText("user_actions.log", logLine + Environment.NewLine); } } catch { /* 忽略日志写入错误,不要影响业务 */ } } } public void OnActionExecuting(ActionExecutingContext context) { } }