51 lines
1.9 KiB
C#
51 lines
1.9 KiB
C#
|
|
using APT.Infrastructure.Core;
|
|||
|
|
using log4net;
|
|||
|
|
using Microsoft.AspNetCore.Mvc.Controllers;
|
|||
|
|
using Microsoft.AspNetCore.Mvc.Filters;
|
|||
|
|
using Newtonsoft.Json;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
using System.Web.Mvc;
|
|||
|
|
|
|||
|
|
namespace APT.API
|
|||
|
|
{
|
|||
|
|
public class LogAttribute : Attribute, IAsyncActionFilter
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 添加操作日志 liyouming
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="context"></param>
|
|||
|
|
/// <param name="next"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public async Task OnActionExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext context, ActionExecutionDelegate next)
|
|||
|
|
{
|
|||
|
|
string actionArguments = context.ActionArguments.ToJson();
|
|||
|
|
var resultContext = await next();
|
|||
|
|
|
|||
|
|
string url = resultContext.HttpContext.Request.Host + resultContext.HttpContext.Request.Path + resultContext.HttpContext.Request.QueryString;
|
|||
|
|
|
|||
|
|
string method = resultContext.HttpContext.Request.Method;
|
|||
|
|
|
|||
|
|
dynamic result = resultContext.Result.GetType().Name == "EmptyResult" ? new { Value = "EmptyResult" } : resultContext.Result as dynamic;
|
|||
|
|
|
|||
|
|
var userHeads = resultContext.HttpContext.Request.Headers;
|
|||
|
|
var userid = string.Empty;
|
|||
|
|
var username = string.Empty;
|
|||
|
|
if (userHeads.ContainsKey("userid"))
|
|||
|
|
{
|
|||
|
|
userid = userHeads["userid"].ToString();
|
|||
|
|
}
|
|||
|
|
if (userHeads.ContainsKey("username"))
|
|||
|
|
{
|
|||
|
|
username = userHeads["username"].ToString();
|
|||
|
|
}
|
|||
|
|
string response = JsonConvert.SerializeObject(result.Value);
|
|||
|
|
var str = $"用户ID:[{userid}],姓名:[{username}],api地址:[{url}],方法:[{method}],接口参数:[{actionArguments}],应答:[{response}]";
|
|||
|
|
LoggerManager.GetLogger("SQLLog").Info(str);
|
|||
|
|
await next.Invoke();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|