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

支持非标准Json及请求对象注入到服务层

新增 AutoUnescapeJson 和 AcceptNonStandardJson 属性,允许服务端处理非标准Json字符串。IXFEServerCoreServiceBase 增加 HttpListenerRequest 属性,服务实例流程中注入当前请求对象。优化 execute 字段容错处理,细化 Handled 属性注释。

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

代码差异

3 个文件 +30 -13
Modified XFEExtension.NetCore.ServerInteractive/Implements/CoreService/XFEServerCoreServiceBase.cs +2 -1
@@ -25,7 +25,8 @@ public abstract class XFEServerCoreServiceBase : IXFEServerCoreServiceBase
25 25 public QueryableJsonNode Json { get; set; }
26 26 /// <inheritdoc/>
27 27 public ServerCoreReturnArgs ReturnArgs { get; set; }
28
28 /// <inheritdoc/>
29 public HttpListenerRequest Request { get; set; }
29 30 /// <inheritdoc/>
30 31 public async Task Send(string message) => await ReturnArgs.Send(message);
31 32
Modified XFEExtension.NetCore.ServerInteractive/Interfaces/CoreService/IXFEServerCoreServiceBase.cs +6 -1
@@ -26,7 +26,7 @@ public interface IXFEServerCoreServiceBase
26 26 bool IsStandardError { get; set; }
27 27
28 28 /// <summary>
29 /// 是否已经处理完成
29 /// 错误抛出是否已经处理完成(如果为true,表示错误已经被处理,不需要ErrorProcessor再次处理)
30 30 /// </summary>
31 31 bool Handled { get; set; }
32 32
@@ -45,6 +45,11 @@ public interface IXFEServerCoreServiceBase
45 45 /// </summary>
46 46 ServerCoreReturnArgs ReturnArgs { get; set; }
47 47
48 /// <summary>
49 /// 当前请求的 HttpListenerRequest 对象
50 /// </summary>
51 HttpListenerRequest Request { get; set; }
52
48 53 /// <summary>
49 54 /// Sends a reply message asynchronously using the current context.
50 55 /// </summary>
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCore.cs +22 -11
@@ -21,6 +21,14 @@ public abstract class XFEServerCore : ServerCoreServiceBase
21 21 {
22 22 static int serverCount = 1;
23 23 /// <summary>
24 /// 是否自动对Json字符串进行反转义处理,默认为true
25 /// </summary>
26 public bool AutoUnescapeJson { get; set; } = true;
27 /// <summary>
28 /// 是否接收非标准的Json字符串
29 /// </summary>
30 public bool AcceptNonStandardJson { get; set; } = true;
31 /// <summary>
24 32 /// 服务器核心错误委托
25 33 /// </summary>
26 34 public XFEEventHandler<XFEServerCore, ServerCoreErrorEventArgs>? ServerCoreError { get; set; }
@@ -92,36 +100,39 @@ public abstract class XFEServerCore : ServerCoreServiceBase
92 100 try
93 101 {
94 102 queryableJsonNode = e.RequestBody ?? throw new ProcessStandardRequestException("请求的API接口不正确");
95 execute = queryableJsonNode["execute"];
103 execute = queryableJsonNode["execute"] ?? string.Empty;
96 104 }
97 105 catch (Exception ex)
98 106 {
99 ServerCoreError?.Invoke(this, new()
107 if (!AcceptNonStandardJson)
100 108 {
101 StatusCode = HttpStatusCode.BadRequest,
102 ReturnArgs = r,
103 ServerException = new ProcessStandardRequestException("无法转换为QueryableJsonNode", ex)
104 });
105 return;
109 ServerCoreError?.Invoke(this, new()
110 {
111 StatusCode = HttpStatusCode.BadRequest,
112 ReturnArgs = r,
113 ServerException = new ProcessStandardRequestException("无法转换为QueryableJsonNode", ex)
114 });
115 return;
116 }
106 117 }
107 118 try
108 119 {
109 if (queryableJsonNode is null)
120 if (queryableJsonNode is null && !AcceptNonStandardJson)
110 121 throw new ProcessStandardRequestException("QueryableJsonNode为空");
122 queryableJsonNode ??= new QueryableJsonNode(new JsonNode());
111 123 if (!execute.IsNullOrEmpty())
112 124 {
113 //Console.WriteLine($"【{clientIP}】请求方法:{execute}");
114 125 Console.Write($"({ServerCoreName})【{clientIP}】请求方法-{execute}:");
115 126 var stopWatch = Stopwatch.StartNew();
116 127 if (standardCoreServiceDictionary.TryGetValue(execute, out var serviceFactory))
117 128 {
118 129 var serviceInstance = serviceFactory();
119 // inject server core reference and set context
120 130 try
121 131 {
122 132 serviceInstance.XFEServerCore = this;
123 133 serviceInstance.Execute = execute;
124 134 serviceInstance.Json = queryableJsonNode;
135 serviceInstance.Request = e.Request;
125 136 serviceInstance.ReturnArgs = r;
126 137 serviceInstance.Initialize();
127 138 serviceInstance.RequestReceive();
@@ -137,7 +148,6 @@ public abstract class XFEServerCore : ServerCoreServiceBase
137 148 ServerException = new XFEServerCoreRequestInnerException($"请求异常-{execute}", ex)
138 149 });
139 150 }
140 //Console.WriteLine($"【{clientIP}】请求处理完成:{execute}");
141 151 stopWatch.Stop();
142 152 Console.WriteLine($"\t[耗时 {InteractiveHelper.GetStopWatchTime(stopWatch)}]");
143 153 return;
@@ -153,6 +163,7 @@ public abstract class XFEServerCore : ServerCoreServiceBase
153 163 instance.XFEServerCore = this;
154 164 instance.Execute = execute;
155 165 instance.Json = queryableJsonNode;
166 instance.Request = e.Request;
156 167 instance.ReturnArgs = r;
157 168 instance.Initialize();
158 169 instance.RequestReceive();