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/Utilities/Extensions/XFEClientRequesterBuilderExtensions.cs
+1
-1
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequester.cs
+31
-6
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequesterBuilder.cs
+24
-12
Modified
XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj
+3
-6
XFEstudio/XFEExtension.NetCore.ServerInteractive
支持多服务名标准请求,优化构建器与接口命名
本次更新引入 StandardMultiRequestServiceListDictionary,支持一个标准请求服务绑定多个服务名,并完善了 XFEClientRequester 的请求分发逻辑。重命名部分字段与方法以提升一致性,新增 AddRequest 方法重载,优化构建器 Build 方法,提升代码可读性和灵活性。版本号升级至 2.3.0。
47bbb8d
代码差异
4 个文件
+59
-25
@@ -75,7 +75,7 @@ public static class XFEClientRequesterBuilderExtensions
75
75
/// </summary>
76
76
/// <typeparam name="T">登录返回用户接口类型</typeparam>
77
77
/// <returns></returns>
78
public XFEClientRequesterBuilder AddLoginRequest<T>() where T : IUserFaceInfo => xFEClientRequesterBuilder.AddStandardRequest<LoginRequestService<T>>("login").AddStandardRequest<ReloginRequestService<T>>("relogin");
78
public XFEClientRequesterBuilder AddLoginRequest<T>() where T : IUserFaceInfo => xFEClientRequesterBuilder.AddRequest<LoginRequestService<T>>("login").AddRequest<ReloginRequestService<T>>("relogin");
79
79
80
80
/// <summary>
81
81
/// 使用XFE标准服务器服务请求
@@ -1,4 +1,5 @@
1
using System.Net;
1
using System.CodeDom.Compiler;
2
using System.Net;
2
3
using System.Text.Json;
3
4
using System.Text.RegularExpressions;
4
5
using XFEExtension.NetCore.AutoImplement;
@@ -19,8 +20,9 @@ public abstract class XFEClientRequester : IRequesterBase
19
20
{
20
21
private readonly JsonSerializerOptions _jsonSerializerOptions = new();
21
22
internal Dictionary<string, Func<IRequestService>> RequestServiceDictionary = [];
22
internal Dictionary<string, Func<IStandardRequestService>> XFERequestServiceDictionary = [];
23
internal Dictionary<string, StandardClientInstanceRequest> XFEClientInstanceRequestDictionary = [];
23
internal Dictionary<string, Func<IStandardRequestService>> StandardRequestServiceDictionary = [];
24
internal Dictionary<List<string>, Func<IStandardRequestService>> StandardMultiRequestServiceListDictionary = [];
25
internal Dictionary<string, StandardClientInstanceRequest> StandardClientInstanceRequestDictionary = [];
24
26
/// <summary>
25
27
/// 自动反转义响应内容(针对XFERequestService和XFEClientInstanceRequest的响应内容进行反转义处理,默认为true)
26
28
/// </summary>
@@ -70,12 +72,12 @@ public abstract class XFEClientRequester : IRequesterBase
70
72
service.XFEClientRequester = this;
71
73
result = await service.Request<object>(parameters);
72
74
}
73
else if (XFERequestServiceDictionary.TryGetValue(serviceName, out var xFEServiceFactory))
75
else if (StandardRequestServiceDictionary.TryGetValue(serviceName, out var xFEServiceFactory))
74
76
{
75
77
var xFEService = xFEServiceFactory();
76
78
xFEService.XFEClientRequester = this;
77
79
xFEService.Execute = serviceName;
78
xFEService.DeviceInfo = this.DeviceInfo;
80
xFEService.DeviceInfo = DeviceInfo;
79
81
xFEService.Parameters = parameters;
80
82
var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, xFEService.PostRequest(), _jsonSerializerOptions);
81
83
result.StatusCode = code;
@@ -92,7 +94,7 @@ public abstract class XFEClientRequester : IRequesterBase
92
94
result.Message = response;
93
95
}
94
96
}
95
else if (XFEClientInstanceRequestDictionary.TryGetValue(serviceName, out var instance))
97
else if (StandardClientInstanceRequestDictionary.TryGetValue(serviceName, out var instance))
96
98
{
97
99
var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, instance.ConstructBody(Session, DeviceInfo, parameters), _jsonSerializerOptions);
98
100
result.StatusCode = code;
@@ -111,6 +113,29 @@ public abstract class XFEClientRequester : IRequesterBase
111
113
result.Message = response;
112
114
}
113
115
}
116
foreach (var instance in from key in StandardMultiRequestServiceListDictionary.Keys where key.Contains(serviceName) select StandardMultiRequestServiceListDictionary[key] into factory select factory())
117
{
118
instance.XFEClientRequester = this;
119
instance.Execute = serviceName;
120
instance.DeviceInfo = DeviceInfo;
121
instance.Parameters = parameters;
122
var (response, code) = await InteractiveHelper.GetServerResponse(RequestAddress, instance.PostRequest(), _jsonSerializerOptions);
123
if (AutoUnescapeResponse)
124
response = Regex.Unescape(response);
125
result.StatusCode = code;
126
if (code == HttpStatusCode.OK)
127
{
128
var requestResult = instance.AnalyzeResponse(response);
129
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
130
result.Message = "Success";
131
result.Result = requestResult;
132
}
133
else
134
{
135
MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
136
result.Message = response;
137
}
138
}
114
139
return result;
115
140
}
116
141
catch (Exception ex)
@@ -15,6 +15,7 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
15
15
private readonly XFEClientRequester _xFEClientRequester = new XFEClientRequesterImpl();
16
16
private readonly Dictionary<string, Func<IRequestService>> _requestServiceDictionary = [];
17
17
private readonly Dictionary<string, Func<IStandardRequestService>> _standardRequestServiceDictionary = [];
18
private readonly Dictionary<List<string>, Func<IStandardRequestService>> _standardMultiRequestServiceListDictionary = [];
18
19
private readonly Dictionary<string, StandardClientInstanceRequest> _standardClientInstanceRequestDictionary = [];
19
20
/// <summary>
20
21
/// 创建构建器
@@ -33,7 +34,7 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
33
34
/// <typeparam name="T">请求服务泛型</typeparam>
34
35
/// <param name="serviceName">请求名称</param>
35
36
/// <returns></returns>
36
public XFEClientRequesterBuilder AddRequest<T>(string serviceName) where T : IRequestService, new()
37
public XFEClientRequesterBuilder AddOriginRequest<T>(string serviceName) where T : IRequestService, new()
37
38
{
38
39
_requestServiceDictionary.Add(serviceName, () =>
39
40
{
@@ -50,7 +51,7 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
50
51
/// <typeparam name="T">请求服务泛型</typeparam>
51
52
/// <param name="serviceName">请求服务名称</param>
52
53
/// <returns></returns>
53
public XFEClientRequesterBuilder AddStandardRequest<T>(string serviceName) where T : IStandardRequestService, new()
54
public XFEClientRequesterBuilder AddRequest<T>(string serviceName) where T : IStandardRequestService, new()
54
55
{
55
56
_standardRequestServiceDictionary.Add(serviceName, () =>
56
57
{
@@ -61,6 +62,23 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
61
62
return this;
62
63
}
63
64
65
/// <summary>
66
/// 添加标准请求器
67
/// </summary>
68
/// <typeparam name="T">请求服务泛型</typeparam>
69
/// <param name="serviceName">请求服务名称</param>
70
/// <returns></returns>
71
public XFEClientRequesterBuilder AddRequest<T>(List<string> serviceName) where T : IStandardRequestService, new()
72
{
73
_standardMultiRequestServiceListDictionary.Add(serviceName, () =>
74
{
75
var inst = new T();
76
ApplyParameter(inst);
77
return inst;
78
});
79
return this;
80
}
81
64
82
/// <summary>
65
83
/// 添加实例请求
66
84
/// </summary>
@@ -97,8 +115,9 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
97
115
_xFEClientRequester.DeviceInfo = options.DeviceInfo;
98
116
_xFEClientRequester.AutoUnescapeResponse = options.AutoUnescapeResponse;
99
117
_xFEClientRequester.RequestServiceDictionary = _requestServiceDictionary;
100
_xFEClientRequester.XFERequestServiceDictionary = _standardRequestServiceDictionary;
101
_xFEClientRequester.XFEClientInstanceRequestDictionary = _standardClientInstanceRequestDictionary;
118
_xFEClientRequester.StandardRequestServiceDictionary = _standardRequestServiceDictionary;
119
_xFEClientRequester.StandardMultiRequestServiceListDictionary = _standardMultiRequestServiceListDictionary;
120
_xFEClientRequester.StandardClientInstanceRequestDictionary = _standardClientInstanceRequestDictionary;
102
121
return _xFEClientRequester;
103
122
}
104
123
@@ -110,13 +129,6 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
110
129
{
111
130
var options = new XFEClientRequesterOptions();
112
131
optionsBuilder(options);
113
_xFEClientRequester.RequestAddress = options.RequestAddress;
114
_xFEClientRequester.Session = options.Session;
115
_xFEClientRequester.DeviceInfo = options.DeviceInfo;
116
_xFEClientRequester.AutoUnescapeResponse = options.AutoUnescapeResponse;
117
_xFEClientRequester.RequestServiceDictionary = _requestServiceDictionary;
118
_xFEClientRequester.XFERequestServiceDictionary = _standardRequestServiceDictionary;
119
_xFEClientRequester.XFEClientInstanceRequestDictionary = _standardClientInstanceRequestDictionary;
120
return _xFEClientRequester;
132
return Build(options);
121
133
}
122
134
}
@@ -5,7 +5,7 @@
5
5
<ImplicitUsings>enable</ImplicitUsings>
6
6
<Nullable>enable</Nullable>
7
7
<GenerateDocumentationFile>True</GenerateDocumentationFile>
8
<Version>2.2.0</Version>
8
<Version>2.3.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,12 +21,9 @@
21
21
<PackageReleaseNotes>
22
22
## 调整
23
23
24
重构服务接口与校验机制,提升标准化与扩展性
24
支持多服务名标准请求,优化构建器与接口命名
25
25
26
本次提交对核心服务接口进行了标准化重构,新增 IXFEStandardServerCoreServiceBase 作为统一基类,简化了校验服务实现,移除异步校验接口,所有校验服务统一为同步/异步方法。
27
校验服务注册方式改为工厂模式,避免状态污染,并支持通过配置灵活启用内置服务。
28
同步更新客户端请求构建器,提升整体可维护性和扩展性。
29
版本号提升至 2.2.0。
26
本次更新引入 StandardMultiRequestServiceListDictionary,支持一个标准请求服务绑定多个服务名,并完善了 XFEClientRequester 的请求分发逻辑。重命名部分字段与方法以提升一致性,新增 AddRequest 方法重载,优化构建器 Build 方法,提升代码可读性和灵活性。版本号升级至 2.3.0。
30
27
31
28
## 新增
32
29