博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.访问记录服务

 public class PageVisitService
 {
     private readonly IMemoryCache _memoryCache;
     private readonly TimeSpan _timeSpan = TimeSpan.FromHours(1);

     public PageVisitService(IMemoryCache memoryCache)
     {
         _memoryCache = memoryCache;
     }

     public bool RegisterVisit(string ipAddress)
     {
         string cacheKey = $"PageVisit_{ipAddress}";

         if (_memoryCache.TryGetValue(cacheKey, out _))
         {
             return false; // 该 IP 在过去一小时已记录,不计数
         }

         _memoryCache.Set(cacheKey, true, _timeSpan);
         return true; // 记录新的访问
     }
 }

 

2.在 Program.csStartup.cs 添加:

builder.Services.AddMemoryCache();
builder.Services.AddSingleton<PageVisitService>();

 

3.在控制器中调用

public class VisitController : ControllerBase
{
    private readonly PageVisitService _pageVisitService;

    public VisitController(PageVisitService pageVisitService)
    {
        _pageVisitService = pageVisitService;
    }

    [HttpGet]
    public IActionResult Visit()
    {
       string userIp = HttpContext.Connection.RemoteIpAddress?.ToString() ?? "Unknown";

       if (_pageVisitService.RegisterVisit(userIp))
       {
           //保存数据库,持久化操作
           //recruitInfo.VisitTimes++;
           //recruitDAL.UpdateRecruitInfo(recruitInfo);
           //await _mySqlTrainDbContext.SaveChangesAsync();
       }
    }
}