2025-12-26 18:55:04 +08:00
|
|
|
|
using Microsoft.AspNetCore.Mvc.Filters;
|
|
|
|
|
|
|
2025-12-26 18:59:27 +08:00
|
|
|
|
namespace SHH.CameraSdk;
|
|
|
|
|
|
|
2025-12-26 18:55:04 +08:00
|
|
|
|
public class UserActionFilter : IActionFilter
|
|
|
|
|
|
{
|
2025-12-26 18:59:27 +08:00
|
|
|
|
// 静态锁,防止多线程同时写文件报错
|
|
|
|
|
|
private static readonly object _logLock = new object();
|
|
|
|
|
|
|
2025-12-26 18:55:04 +08:00
|
|
|
|
public void OnActionExecuted(ActionExecutedContext context)
|
|
|
|
|
|
{
|
2025-12-26 18:59:27 +08:00
|
|
|
|
// 只记录非 GET 请求(即修改性质的操作)
|
2025-12-26 18:55:04 +08:00
|
|
|
|
if (context.HttpContext.Request.Method != "GET")
|
|
|
|
|
|
{
|
2025-12-26 18:59:27 +08:00
|
|
|
|
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");
|
2025-12-26 18:55:04 +08:00
|
|
|
|
|
2025-12-26 18:59:27 +08:00
|
|
|
|
var logLine = $"{time} | IP: {user} | {method} {path}";
|
|
|
|
|
|
|
|
|
|
|
|
lock (_logLock)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 追加写入到运行目录下的 user_actions.log
|
|
|
|
|
|
File.AppendAllText("user_actions.log", logLine + Environment.NewLine);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch { /* 忽略日志写入错误,不要影响业务 */ }
|
2025-12-26 18:55:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-12-26 18:59:27 +08:00
|
|
|
|
|
2025-12-26 18:55:04 +08:00
|
|
|
|
public void OnActionExecuting(ActionExecutingContext context) { }
|
|
|
|
|
|
}
|