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

支持多服务名标准请求,优化构建器与接口命名

本次更新引入 StandardMultiRequestServiceListDictionary,支持一个标准请求服务绑定多个服务名,并完善了 XFEClientRequester 的请求分发逻辑。重命名部分字段与方法以提升一致性,新增 AddRequest 方法重载,优化构建器 Build 方法,提升代码可读性和灵活性。版本号升级至 2.3.0。

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

代码差异

3 个文件 +58 -24
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequester.cs +31 -6
@@ -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)
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequesterBuilder.cs +24 -12
@@ -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 }
Modified XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj +3 -6
@@ -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