XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.ServerInteractive

[DLL] Server interaction extension, including user identity verification and querying in conjunction with AutoConfig

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension.NetCore.ServerInteractive

重构请求服务注册与实例化机制,提升安全性

本次更新对请求服务的注册、实例化和调用流程进行了重构,采用工厂方法动态创建服务实例,避免状态污染,提升线程安全性和可扩展性。统一了 IXFERequestService 属性访问级别,新增 Session 属性,简化 PostRequest 方法签名。同步调整命名与属性,版本号升级至 2.1.0。完善了文档和注释,整体提升了代码可维护性。

5f6f4e5
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

10 个文件 +81 -41
Modified XFEExtension.NetCore.ServerInteractive.Test/Program.cs +1 -1
@@ -43,7 +43,7 @@ internal class Program
43 43 Console.WriteLine(result.Result.UserInfo.PermissionLevel);
44 44 TableRequester.RequestAddress = XFEClientRequester.RequestAddress;
45 45 TableRequester.Session = result.Result.Session;
46 TableRequester.ComputerInfo = XFEClientRequester.ComputerInfo;
46 TableRequester.DeviceInfo = XFEClientRequester.DeviceInfo;
47 47 }
48 48 else
49 49 {
Modified XFEExtension.NetCore.ServerInteractive/Implements/Requester/XFERequestServiceBase.cs +2 -1
@@ -8,6 +8,8 @@ namespace XFEExtension.NetCore.ServerInteractive.Implements.Requester;
8 8 /// </summary>
9 9 public abstract class XFERequestServiceBase : IXFERequestService
10 10 {
11 /// <inheritdoc/>
12 public string Session { get => XFEClientRequester.Session; set => XFEClientRequester.Session = value; }
11 13 /// <inheritdoc/>
12 14 public string Execute { get; set; } = string.Empty;
13 15 /// <inheritdoc/>
@@ -16,7 +18,6 @@ public abstract class XFERequestServiceBase : IXFERequestService
16 18 public object[] Parameters { get; set; } = [];
17 19 /// <inheritdoc/>
18 20 public XFEClientRequester XFEClientRequester { get; set; }
19
20 21 /// <inheritdoc/>
21 22 public abstract object AnalyzeResponse(string response);
22 23
Modified XFEExtension.NetCore.ServerInteractive/Interfaces/Requester/IXFERequestService.cs +7 -3
@@ -8,15 +8,19 @@ public interface IXFERequestService : IRequestServiceBase
8 8 /// <summary>
9 9 /// 待请求的方法(如 check_connect)
10 10 /// </summary>
11 string Execute { get; set; }
11 string Execute { get; internal set; }
12 12 /// <summary>
13 13 /// 设备信息
14 14 /// </summary>
15 string DeviceInfo { get; set; }
15 string DeviceInfo { get; internal set; }
16 /// <summary>
17 /// 当前会话ID
18 /// </summary>
19 string Session { get; set; }
16 20 /// <summary>
17 21 /// 待请求的方法的参数列表
18 22 /// </summary>
19 object[] Parameters { get; set; }
23 object[] Parameters { get; internal set; }
20 24 /// <summary>
21 25 /// 提交请求体
22 26 /// </summary>
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/ClearLogRequestService.cs +4 -4
@@ -11,10 +11,10 @@ public class ClearLogRequestService : XFERequestServiceBase
11 11 public override object AnalyzeResponse(string response) => true;
12 12
13 13 /// <inheritdoc/>
14 public override object PostRequest(string execute, params object[] parameters) => new
14 public override object PostRequest() => new
15 15 {
16 execute,
17 session = XFEClientRequester.Session,
18 deviceInfo = XFEClientRequester.DeviceInfo
16 execute = Execute,
17 session = Session,
18 deviceInfo = DeviceInfo
19 19 };
20 20 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/GetLogRequestService.cs +6 -6
@@ -11,12 +11,12 @@ public class GetLogRequestService : XFERequestServiceBase
11 11 public override object AnalyzeResponse(string response) => response;
12 12
13 13 /// <inheritdoc/>
14 public override object PostRequest(string execute, params object[] parameters) => new
14 public override object PostRequest() => new
15 15 {
16 execute,
17 session = XFEClientRequester.Session,
18 deviceInfo = XFEClientRequester.DeviceInfo,
19 startDateTime = parameters[0],
20 endDateTime = parameters[1],
16 execute = Execute,
17 session = Session,
18 deviceInfo = DeviceInfo,
19 startDateTime = Parameters[0],
20 endDateTime = Parameters[1],
21 21 };
22 22 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/LoginRequestService.cs +6 -6
@@ -21,16 +21,16 @@ public class LoginRequestService<T> : XFERequestServiceBase where T : IUserFaceI
21 21 public override object AnalyzeResponse(string response)
22 22 {
23 23 var result = JsonSerializer.Deserialize<UserLoginResult<T>>(response, _jsonSerializerOptions);
24 XFEClientRequester.Session = result!.Session;
24 Session = result!.Session;
25 25 return result;
26 26 }
27 27
28 28 /// <inheritdoc/>
29 public override object PostRequest(string execute, params object[] parameters) => new
29 public override object PostRequest() => new
30 30 {
31 execute,
32 deviceInfo = XFEClientRequester.DeviceInfo,
33 account = parameters[0],
34 password = parameters[1]
31 execute = Execute,
32 deviceInfo = DeviceInfo,
33 account = Parameters[0],
34 password = Parameters[1]
35 35 };
36 36 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/ReloginRequestService.cs +4 -4
@@ -19,10 +19,10 @@ public class ReloginRequestService<T> : XFERequestServiceBase where T : IUserFac
19 19 public override object AnalyzeResponse(string response) => JsonSerializer.Deserialize<T>(response, _jsonSerializerOptions)!;
20 20
21 21 /// <inheritdoc/>
22 public override object PostRequest(string execute, params object[] parameters) => new
22 public override object PostRequest() => new
23 23 {
24 execute,
25 session = XFEClientRequester.Session,
26 deviceInfo = XFEClientRequester.DeviceInfo,
24 execute = Execute,
25 session = Session,
26 deviceInfo = DeviceInfo,
27 27 };
28 28 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequester.cs +12 -5
@@ -18,8 +18,8 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
18 18 public abstract class XFEClientRequester : IRequesterBase
19 19 {
20 20 private readonly JsonSerializerOptions _jsonSerializerOptions = new();
21 internal Dictionary<string, IRequestService> RequestServiceDictionary = [];
22 internal Dictionary<string, IXFERequestService> XFERequestServiceDictionary = [];
21 internal Dictionary<string, Func<IRequestService>> RequestServiceDictionary = [];
22 internal Dictionary<string, Func<IXFERequestService>> XFERequestServiceDictionary = [];
23 23 internal Dictionary<string, XFEClientInstanceRequest> XFEClientInstanceRequestDictionary = [];
24 24 /// <summary>
25 25 /// 自动反转义响应内容(针对XFERequestService和XFEClientInstanceRequest的响应内容进行反转义处理,默认为true)
@@ -64,13 +64,20 @@ public abstract class XFEClientRequester : IRequesterBase
64 64 var result = new ClientRequestResult<object>();
65 65 try
66 66 {
67 if (RequestServiceDictionary.TryGetValue(serviceName, out var service))
67 if (RequestServiceDictionary.TryGetValue(serviceName, out var serviceFactory))
68 68 {
69 var service = serviceFactory();
70 service.XFEClientRequester = this;
69 71 result = await service.Request<object>(parameters);
70 72 }
71 else if (XFERequestServiceDictionary.TryGetValue(serviceName, out var xFEService))
73 else if (XFERequestServiceDictionary.TryGetValue(serviceName, out var xFEServiceFactory))
72 74 {
73 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, xFEService.PostRequest(serviceName, parameters), _jsonSerializerOptions);
75 var xFEService = xFEServiceFactory();
76 xFEService.XFEClientRequester = this;
77 xFEService.Execute = serviceName;
78 xFEService.DeviceInfo = this.DeviceInfo;
79 xFEService.Parameters = parameters;
80 var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, xFEService.PostRequest(), _jsonSerializerOptions);
74 81 result.StatusCode = code;
75 82 if (code == HttpStatusCode.OK)
76 83 {
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequesterBuilder.cs +36 -8
@@ -13,8 +13,8 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester;
13 13 public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientRequesterBuilder>
14 14 {
15 15 private readonly XFEClientRequester _xFEClientRequester = new XFEClientRequesterImpl();
16 private readonly Dictionary<string, IRequestService> _requestServiceDictionary = [];
17 private readonly Dictionary<string, IXFERequestService> _xFERequestServiceDictionary = [];
16 private readonly Dictionary<string, Func<IRequestService>> _requestServiceDictionary = [];
17 private readonly Dictionary<string, Func<IXFERequestService>> _xFERequestServiceDictionary = [];
18 18 private readonly Dictionary<string, XFEClientInstanceRequest> _xFEClientInstanceRequestDictionary = [];
19 19 /// <summary>
20 20 /// 创建构建器
@@ -35,8 +35,13 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
35 35 /// <returns></returns>
36 36 public XFEClientRequesterBuilder AddRequest(string serviceName, IRequestService requestService)
37 37 {
38 ApplyParameter(requestService);
39 _requestServiceDictionary.Add(serviceName, requestService);
38 var type = requestService.GetType();
39 _requestServiceDictionary.Add(serviceName, () =>
40 {
41 var inst = (IRequestService)Activator.CreateInstance(type)!;
42 ApplyParameter(inst);
43 return inst;
44 });
40 45 return this;
41 46 }
42 47
@@ -46,7 +51,16 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
46 51 /// <typeparam name="T">请求服务泛型</typeparam>
47 52 /// <param name="serviceName">请求名称</param>
48 53 /// <returns></returns>
49 public XFEClientRequesterBuilder AddRequest<T>(string serviceName) where T : IRequestService, new() => AddRequest(serviceName, new T());
54 public XFEClientRequesterBuilder AddRequest<T>(string serviceName) where T : IRequestService, new()
55 {
56 _requestServiceDictionary.Add(serviceName, () =>
57 {
58 var inst = new T();
59 ApplyParameter(inst);
60 return inst;
61 });
62 return this;
63 }
50 64
51 65 /// <summary>
52 66 /// 添加XFE请求器
@@ -56,8 +70,13 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
56 70 /// <returns></returns>
57 71 public XFEClientRequesterBuilder AddXFERequest(string serviceName, IXFERequestService xFERequestService)
58 72 {
59 ApplyParameter(xFERequestService);
60 _xFERequestServiceDictionary.Add(serviceName, xFERequestService);
73 var type = xFERequestService.GetType();
74 _xFERequestServiceDictionary.Add(serviceName, () =>
75 {
76 var inst = (IXFERequestService)Activator.CreateInstance(type)!;
77 ApplyParameter(inst);
78 return inst;
79 });
61 80 return this;
62 81 }
63 82
@@ -67,7 +86,16 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
67 86 /// <typeparam name="T">请求服务泛型</typeparam>
68 87 /// <param name="serviceName">请求服务名称</param>
69 88 /// <returns></returns>
70 public XFEClientRequesterBuilder AddXFERequest<T>(string serviceName) where T : IXFERequestService, new() => AddXFERequest(serviceName, new T());
89 public XFEClientRequesterBuilder AddXFERequest<T>(string serviceName) where T : IXFERequestService, new()
90 {
91 _xFERequestServiceDictionary.Add(serviceName, () =>
92 {
93 var inst = new T();
94 ApplyParameter(inst);
95 return inst;
96 });
97 return this;
98 }
71 99
72 100 /// <summary>
73 101 /// 添加实例请求
Modified XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj +3 -3
@@ -5,7 +5,7 @@
5 5 <ImplicitUsings>enable</ImplicitUsings>
6 6 <Nullable>enable</Nullable>
7 7 <GenerateDocumentationFile>True</GenerateDocumentationFile>
8 <Version>2.0.2</Version>
8 <Version>2.1.0</Version>
9 9 <Title>XFEExtension.NetCore.ServerInteractive</Title>
10 10 <RepositoryUrl>https://github.com/XFEstudio/XFEExtension.NetCore.ServerInteractive</RepositoryUrl>
11 11 <AnalysisLevel>latest</AnalysisLevel>
@@ -21,9 +21,9 @@
21 21 <PackageReleaseNotes>
22 22 ## 调整
23 23
24 XFEClientRequesterOptions 默认电脑信息自动获取
24 重构请求服务注册与实例化机制,提升安全性
25 25
26 将 DeviceInfo 默认值改为自动获取唯一硬件ID,增强设备识别能力;新增 DeviceHelper 命名空间引用;项目版本号升级至 2.0.2。
26 本次更新对请求服务的注册、实例化和调用流程进行了重构,采用工厂方法动态创建服务实例,避免状态污染,提升线程安全性和可扩展性。统一了 IXFERequestService 属性访问级别,新增 Session 属性,简化 PostRequest 方法签名。同步调整命名与属性,版本号升级至 2.1.0。完善了文档和注释,整体提升了代码可维护性。
27 27
28 28 ## 新增
29 29