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

优化异常处理与客户端IP传递方式

本次更新统一了异常处理参数结构,将 CyberCommRequestEventArgs 替换为 ServerCoreReturnArgs,并在 ReturnArgs 中新增 ClientIP 属性。XFEServerCoreServiceBase 的 ClientIP 属性改为通过 ReturnArgs 读写,确保客户端IP在异常场景下正确传递。异常处理服务和核心服务均调整为使用 ReturnArgs,提升了代码一致性和维护性。版本号升级至 1.1.8。

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

代码差异

6 个文件 +25 -23
Modified XFEExtension.NetCore.ServerInteractive/Implements/CoreService/XFEServerCoreServiceBase.cs +1 -1
@@ -14,7 +14,7 @@ public abstract class XFEServerCoreServiceBase : IXFEServerCoreServiceBase
14 14 /// <inheritdoc/>
15 15 public bool Handled { get => ReturnArgs.Handled; set => ReturnArgs.Handled = value; }
16 16 /// <inheritdoc/>
17 public string ClientIP { get; set; } = string.Empty;
17 public string ClientIP { get => ReturnArgs.ClientIP; set => ReturnArgs.ClientIP = value; }
18 18 /// <inheritdoc/>
19 19 public string Execute { get; set; } = string.Empty;
20 20 /// <inheritdoc/>
Modified XFEExtension.NetCore.ServerInteractive/Models/ServerModels/ServerCoreErrorEventArgs.cs +2 -2
@@ -21,9 +21,9 @@ public class ServerCoreErrorEventArgs
21 21 /// </summary>
22 22 public HttpStatusCode StatusCode { get; set; } = HttpStatusCode.InternalServerError;
23 23 /// <summary>
24 /// 本次异常服务器参数
24 /// 本次异常服务器返回参数
25 25 /// </summary>
26 public CyberCommRequestEventArgs? CyberCommRequestEventArgs { get; set; }
26 public ServerCoreReturnArgs? ReturnArgs { get; set; }
27 27
28 28 /// <summary>
29 29 /// 服务器核心错误事件参数
Modified XFEExtension.NetCore.ServerInteractive/Models/ServerModels/ServerCoreReturnArgs.cs +4 -0
@@ -13,6 +13,10 @@ public class ServerCoreReturnArgs : Exception
13 13 /// </summary>
14 14 public string ReturnMessage { get; set; } = string.Empty;
15 15 /// <summary>
16 /// 客户端IP地址
17 /// </summary>
18 public string ClientIP { get; set; } = string.Empty;
19 /// <summary>
16 20 /// 是否已经处理完成
17 21 /// </summary>
18 22 public bool Handled { get; set; } = false;
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/ServerCoreExceptionProcessService.cs +3 -3
@@ -21,7 +21,7 @@ public class ServerCoreExceptionProcessService : ServerCoreOriginalServiceBase
21 21
22 22 private async void XFEServerCore_ServerCoreError(XFEServerCore sender, ServerCoreErrorEventArgs e)
23 23 {
24 if (!e.Handled && e.CyberCommRequestEventArgs is not null)
24 if (!e.Handled && e.ReturnArgs is not null)
25 25 {
26 26 var currentException = e.ServerException?.InnerException;
27 27 var errorMessage = e.ServerException?.Message ?? "服务器内部异常";
@@ -37,12 +37,12 @@ public class ServerCoreExceptionProcessService : ServerCoreOriginalServiceBase
37 37 currentException = currentException.InnerException;
38 38 }
39 39 }
40 Console.Write($"[WARN]【{e.CyberCommRequestEventArgs.ClientIP}】{errorMessage}");
40 Console.Write($"[WARN]【{e.ServerException}】{errorMessage}");
41 41 if (e.ServerException?.StackTrace is not null)
42 42 Console.WriteLine($"[TRACE]{e.ServerException?.StackTrace}");
43 43 try
44 44 {
45 await e.CyberCommRequestEventArgs.ReplyAndClose(errorMessage, e.StatusCode);
45 await e.ReturnArgs.ReplyAndClose(errorMessage, e.StatusCode);
46 46 }
47 47 catch { }
48 48 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCore.cs +10 -11
@@ -66,6 +66,7 @@ public abstract class XFEServerCore : ServerCoreServiceBase
66 66 };
67 67 var clientIP = e.ClientIP;
68 68 try { clientIP = GetIpFunction(e); } catch (Exception ex) { Console.WriteLine($"[WARN]获取IP地址失败:{ex.Message}"); }
69 r.ClientIP = clientIP;
69 70 try
70 71 {
71 72 foreach (var serverCoreVerifyService in serverCoreVerifyServiceList)
@@ -81,7 +82,7 @@ public abstract class XFEServerCore : ServerCoreServiceBase
81 82 {
82 83 StatusCode = r.StatusCode,
83 84 Handled = r.Handled,
84 CyberCommRequestEventArgs = e,
85 ReturnArgs = r,
85 86 ServerException = new ProcessStandardRequestException("请求校验失败", ex)
86 87 });
87 88 return;
@@ -98,7 +99,7 @@ public abstract class XFEServerCore : ServerCoreServiceBase
98 99 ServerCoreError?.Invoke(this, new()
99 100 {
100 101 StatusCode = HttpStatusCode.BadRequest,
101 CyberCommRequestEventArgs = e,
102 ReturnArgs = r,
102 103 ServerException = new ProcessStandardRequestException("无法转换为QueryableJsonNode", ex)
103 104 });
104 105 return;
@@ -109,8 +110,8 @@ public abstract class XFEServerCore : ServerCoreServiceBase
109 110 throw new ProcessStandardRequestException("QueryableJsonNode为空");
110 111 if (!execute.IsNullOrEmpty())
111 112 {
112 //Console.WriteLine($"【{e.ClientIP}】请求方法:{execute}");
113 Console.Write($"【{e.ClientIP}】请求方法-{execute}:");
113 //Console.WriteLine($"【{clientIP}】请求方法:{execute}");
114 Console.Write($"【{clientIP}】请求方法-{execute}:");
114 115 var stopWatch = Stopwatch.StartNew();
115 116 if (standardCoreServiceDictionary.TryGetValue(execute, out var serviceFactory))
116 117 {
@@ -119,7 +120,6 @@ public abstract class XFEServerCore : ServerCoreServiceBase
119 120 try
120 121 {
121 122 serviceInstance.XFEServerCore = this;
122 serviceInstance.ClientIP = e.ClientIP;
123 123 serviceInstance.Execute = execute;
124 124 serviceInstance.Json = queryableJsonNode;
125 125 serviceInstance.ReturnArgs = r;
@@ -133,11 +133,11 @@ public abstract class XFEServerCore : ServerCoreServiceBase
133 133 {
134 134 StatusCode = r.StatusCode,
135 135 Handled = r.Handled,
136 CyberCommRequestEventArgs = e,
136 ReturnArgs = r,
137 137 ServerException = new XFEServerCoreRequestInnerException($"请求异常-{execute}", ex)
138 138 });
139 139 }
140 //Console.WriteLine($"【{e.ClientIP}】请求处理完成:{execute}");
140 //Console.WriteLine($"【{clientIP}】请求处理完成:{execute}");
141 141 stopWatch.Stop();
142 142 Console.WriteLine($"\t[耗时 {InteractiveHelper.GetStopWatchTime(stopWatch)}]");
143 143 return;
@@ -151,7 +151,6 @@ public abstract class XFEServerCore : ServerCoreServiceBase
151 151 try
152 152 {
153 153 instance.XFEServerCore = this;
154 instance.ClientIP = e.ClientIP;
155 154 instance.Execute = execute;
156 155 instance.Json = queryableJsonNode;
157 156 instance.ReturnArgs = r;
@@ -165,7 +164,7 @@ public abstract class XFEServerCore : ServerCoreServiceBase
165 164 {
166 165 StatusCode = r.StatusCode,
167 166 Handled = r.Handled,
168 CyberCommRequestEventArgs = e,
167 ReturnArgs = r,
169 168 ServerException = new XFEServerCoreRequestInnerException($"请求异常-{execute}", ex)
170 169 });
171 170 }
@@ -177,7 +176,7 @@ public abstract class XFEServerCore : ServerCoreServiceBase
177 176 ServerCoreError?.Invoke(this, new()
178 177 {
179 178 StatusCode = HttpStatusCode.BadRequest,
180 CyberCommRequestEventArgs = e,
179 ReturnArgs = r,
181 180 ServerException = new ExecutionUnregisteredException($"请求的方法未注册-{execute}")
182 181 });
183 182 }
@@ -187,7 +186,7 @@ public abstract class XFEServerCore : ServerCoreServiceBase
187 186 ServerCoreError?.Invoke(this, new()
188 187 {
189 188 StatusCode = HttpStatusCode.InternalServerError,
190 CyberCommRequestEventArgs = e,
189 ReturnArgs = r,
191 190 ServerException = new ProcessStandardRequestException("处理标准请求时发生异常", ex)
192 191 });
193 192 }
Modified XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj +5 -6
@@ -5,7 +5,7 @@
5 5 <ImplicitUsings>enable</ImplicitUsings>
6 6 <Nullable>enable</Nullable>
7 7 <GenerateDocumentationFile>True</GenerateDocumentationFile>
8 <Version>1.1.7</Version>
8 <Version>1.1.8</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,11 @@
21 21 <PackageReleaseNotes>
22 22 ## 调整
23 23
24 增强核心服务IP处理与接口扩展,升级至1.1.7
24 优化异常处理与客户端IP传递方式
25 25
26 本次更新新增了核心服务基类和接口的 ClientIP 与 Handled 属性,支持服务处理过程中获取客户端IP和标记处理状态。
27 XFEServerCore 增加 GetIpFunction 委托,允许自定义IP获取逻辑。
28 XFEServerCoreBuilder 新增 UseCustomIPGetFunction 方法,提升扩展性。
29 服务实例初始化时补充 ClientIP 赋值。版本号升级至 1.1.7,并优化注释与初始化顺序。
26 本次更新统一了异常处理参数结构,将 CyberCommRequestEventArgs 替换为 ServerCoreReturnArgs,并在 ReturnArgs 中新增 ClientIP 属性。
27 XFEServerCoreServiceBase 的 ClientIP 属性改为通过 ReturnArgs 读写,确保客户端IP在异常场景下正确传递。异常处理服务和核心服务均调整为使用 ReturnArgs,提升了代码一致性和维护性。
28 版本号升级至 1.1.8。
30 29
31 30 ## 新增
32 31