ApiLogService.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.IO;
  3. using GxPress.Entity;
  4. using GxPress.Service.Interface;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.Extensions.Configuration;
  7. using SqlSugar;
  8. namespace GxPress.Service.Implement
  9. {
  10. public class ApiLogService : IApiLogService
  11. {
  12. private readonly IConfiguration _configuration;
  13. private readonly SqlSugarClient _dbContext;
  14. public ApiLogService(IConfiguration configuration, SqlSugarClient dbContext)
  15. {
  16. _configuration = configuration;
  17. _dbContext = dbContext;
  18. }
  19. public void DataSave(HttpContext context, long responseTime,int userId)
  20. {
  21. var isLog = _configuration.GetValue<bool>("ApiLog:IsEnable");
  22. if (isLog)
  23. {
  24. var requestMethod = context.Request.Method;
  25. var requestURL = $"{context.Request.Scheme}://{context.Request.Host}{context.Request.Path}";
  26. //var accessToken = context.GetTokenAsync("access_token").Result;//添加身份验证的项目可以使用此方法获取到access_toekn
  27. var accessToken = string.Empty;
  28. var requestBody = string.Empty;
  29. if (requestMethod == "POST")
  30. {
  31. context.Request.Body.Seek(0, SeekOrigin.Begin);
  32. var _reader = new StreamReader(context.Request.Body);
  33. requestBody = _reader.ReadToEnd();
  34. }
  35. _dbContext.Insertable(new UserLogin
  36. {
  37. AccessToken = accessToken,
  38. AccessTime = DateTime.Now,
  39. AccessAction = requestMethod,
  40. AccessApiUrl = requestURL,
  41. QueryString = context.Request.QueryString.ToString(),
  42. Body = requestBody,
  43. HttpStatus = context.Response.StatusCode,
  44. ClientIP = context.Connection.RemoteIpAddress.ToString(),
  45. ResponseTime = responseTime,
  46. UserId=userId
  47. }).ExecuteCommand();
  48. }
  49. }
  50. }
  51. }