XFEExtension.NetCore.ServerInteractive
[DLL] Server interaction extension, including user identity verification and querying in conjunction with AutoConfig
关注
0
Fork
0
Star
0
返回提交历史
Modified
XFEExtension.NetCore.ServerInteractive.Test/Program.cs
+1
-1
Modified
XFEExtension.NetCore.ServerInteractive/Implements/Requester/XFERequestServiceBase.cs
+2
-1
Modified
XFEExtension.NetCore.ServerInteractive/Interfaces/Requester/IXFERequestService.cs
+7
-3
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/ClearLogRequestService.cs
+4
-4
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/GetLogRequestService.cs
+6
-6
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/LoginRequestService.cs
+6
-6
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/ReloginRequestService.cs
+4
-4
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequester.cs
+12
-5
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequesterBuilder.cs
+36
-8
Modified
XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj
+3
-3
XFEstudio/XFEExtension.NetCore.ServerInteractive
重构请求服务注册与实例化机制,提升安全性
本次更新对请求服务的注册、实例化和调用流程进行了重构,采用工厂方法动态创建服务实例,避免状态污染,提升线程安全性和可扩展性。统一了 IXFERequestService 属性访问级别,新增 Session 属性,简化 PostRequest 方法签名。同步调整命名与属性,版本号升级至 2.1.0。完善了文档和注释,整体提升了代码可维护性。
5f6f4e5
代码差异
10 个文件
+81
-41
@@ -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
{
@@ -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
@@ -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>
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
{
@@ -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
/// 添加实例请求
@@ -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