diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinSecurityExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinSecurityExtensions.cs
new file mode 100644
index 00000000..46dc09ac
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinSecurityExtensions.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Flurl;
+using Flurl.Http;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work
+{
+ public static class WechatWorkClientExecuteCgibinSecurityExtensions
+ {
+ ///
+ /// 异步调用 [POST] /cgi-bin/security/get_file_oper_record 接口。
+ /// REF: https://developer.work.weixin.qq.com/document/path/98079
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static async Task ExecuteCgibinSecurityGetFileOperateRecordAsync(this WechatWorkClient client, Models.CgibinSecurityGetFileOperateRecordRequest request, CancellationToken cancellationToken = default)
+ {
+ if (client is null) throw new ArgumentNullException(nameof(client));
+ if (request is null) throw new ArgumentNullException(nameof(request));
+
+ IFlurlRequest flurlReq = client
+ .CreateRequest(request, HttpMethod.Post, "cgi-bin", "security", "get_file_oper_record")
+ .SetQueryParam("access_token", request.AccessToken);
+
+ return await client.SendRequestWithJsonAsync(flurlReq, cancellationToken: cancellationToken);
+ }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetFileOperateRecordRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetFileOperateRecordRequest.cs
new file mode 100644
index 00000000..c1135b4d
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetFileOperateRecordRequest.cs
@@ -0,0 +1,72 @@
+using System.Collections.Generic;
+
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/security/get_file_oper_record 接口的请求。
+ ///
+ public class CgibinSecurityGetFileOperateRecordRequest : WechatWorkRequest
+ {
+ public static class Types
+ {
+ public class Operation
+ {
+ ///
+ /// 获取或设置操作类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+
+ ///
+ /// 获取或设置操作来源。
+ ///
+ [Newtonsoft.Json.JsonProperty("source")]
+ [System.Text.Json.Serialization.JsonPropertyName("source")]
+ public int? Source { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置开始时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("start_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("start_time")]
+ public long StartTimestamp { get; set; }
+
+ ///
+ /// 获取或设置结束时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("end_time")]
+ [System.Text.Json.Serialization.JsonPropertyName("end_time")]
+ public long EndTimestamp { get; set; }
+
+ ///
+ /// 获取或设置操作者 UserId 列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid_list")]
+ public IList? UserIdList { get; set; }
+
+ ///
+ /// 获取或设置操作信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("operation")]
+ [System.Text.Json.Serialization.JsonPropertyName("operation")]
+ public Types.Operation? Operation { get; set; }
+
+ ///
+ /// 获取或设置分页每页数量。
+ ///
+ [Newtonsoft.Json.JsonProperty("limit")]
+ [System.Text.Json.Serialization.JsonPropertyName("limit")]
+ public int? Limit { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("cursor")]
+ public string? Cursor { get; set; }
+ }
+}
diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetFileOperateRecordResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetFileOperateRecordResponse.cs
new file mode 100644
index 00000000..8884adfa
--- /dev/null
+++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSecurity/CgibinSecurityGetFileOperateRecordResponse.cs
@@ -0,0 +1,114 @@
+namespace SKIT.FlurlHttpClient.Wechat.Work.Models
+{
+ ///
+ /// 表示 [POST] /cgi-bin/security/get_file_oper_record 接口的响应。
+ ///
+ public class CgibinSecurityGetFileOperateRecordResponse : WechatWorkResponse
+ {
+ public static class Types
+ {
+ public class Record
+ {
+ public static class Types
+ {
+ public class Operation
+ {
+ ///
+ /// 获取或设置操作类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+
+ ///
+ /// 获取或设置操作来源。
+ ///
+ [Newtonsoft.Json.JsonProperty("source")]
+ [System.Text.Json.Serialization.JsonPropertyName("source")]
+ public int? Source { get; set; }
+ }
+
+ public class ExternalUser
+ {
+ ///
+ /// 获取或设置用户类型。
+ ///
+ [Newtonsoft.Json.JsonProperty("type")]
+ [System.Text.Json.Serialization.JsonPropertyName("type")]
+ public int Type { get; set; }
+
+ ///
+ /// 获取或设置用户名。
+ ///
+ [Newtonsoft.Json.JsonProperty("name")]
+ [System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string Name { get; set; } = default!;
+
+ ///
+ /// 获取或设置企业微信用户名。
+ ///
+ [Newtonsoft.Json.JsonProperty("corp_name")]
+ [System.Text.Json.Serialization.JsonPropertyName("corp_name")]
+ public string? CorpName { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置企业用户 UserId。
+ ///
+ [Newtonsoft.Json.JsonProperty("userid")]
+ [System.Text.Json.Serialization.JsonPropertyName("userid")]
+ public string? UserId { get; set; }
+
+ ///
+ /// 获取或设置企业外部人员帐号信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("external_user")]
+ [System.Text.Json.Serialization.JsonPropertyName("external_user")]
+ public Types.ExternalUser? ExternalUser { get; set; }
+
+ ///
+ /// 获取或设置操作信息。
+ ///
+ [Newtonsoft.Json.JsonProperty("operation")]
+ [System.Text.Json.Serialization.JsonPropertyName("operation")]
+ public Types.Operation Operation { get; set; } = default!;
+
+ ///
+ /// 获取或设置时间戳。
+ ///
+ [Newtonsoft.Json.JsonProperty("time")]
+ [System.Text.Json.Serialization.JsonPropertyName("time")]
+ public long Timestamp { get; set; }
+
+ ///
+ /// 获取或设置文件操作说明。
+ ///
+ [Newtonsoft.Json.JsonProperty("file_info")]
+ [System.Text.Json.Serialization.JsonPropertyName("file_info")]
+ public string? FileInfo { get; set; }
+ }
+ }
+
+ ///
+ /// 获取或设置操作记录列表。
+ ///
+ [Newtonsoft.Json.JsonProperty("record_list")]
+ [System.Text.Json.Serialization.JsonPropertyName("record_list")]
+ public Types.Record[] RecordList { get; set; } = default!;
+
+ ///
+ /// 获取或设置是否还有更多数据。
+ ///
+ [Newtonsoft.Json.JsonProperty("has_more")]
+ [System.Text.Json.Serialization.JsonPropertyName("has_more")]
+ public bool HasMore { get; set; }
+
+ ///
+ /// 获取或设置翻页标记。
+ ///
+ [Newtonsoft.Json.JsonProperty("next_cursor")]
+ [System.Text.Json.Serialization.JsonPropertyName("next_cursor")]
+ public string? NextCursor { get; set; }
+ }
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetFileOperateRecordRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetFileOperateRecordRequest.json
new file mode 100644
index 00000000..76d0ecac
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetFileOperateRecordRequest.json
@@ -0,0 +1,11 @@
+{
+ "start_time": 166666666,
+ "end_time": 166666667,
+ "userid_list": [ "zhangsan", "lisi" ],
+ "operation": {
+ "type": 1,
+ "source": 401
+ },
+ "cursor": "ngLgjieajgieo",
+ "limit": 100
+}
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetFileOperateRecordResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetFileOperateRecordResponse.json
new file mode 100644
index 00000000..4d9c110d
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSecurity/CgibinSecurityGetFileOperateRecordResponse.json
@@ -0,0 +1,29 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "has_more": true,
+ "next_cursor": "gejMjgLjgeigoejg",
+ "record_list": [
+ {
+ "time": 16666666666,
+ "userid": "zhangsan",
+ "operation": {
+ "type": 101,
+ "source": 401
+ },
+ "file_info": "1234567890.jpg"
+ },
+ {
+ "time": 16666666666,
+ "external_user": {
+ "type": 2,
+ "name": "xxx",
+ "corp_name": "十分科技"
+ },
+ "operation": {
+ "type": 113
+ },
+ "file_info": "通过zhangsan的链接下载了1234567890.jpg"
+ }
+ ]
+}