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/Implements/CoreService/XFEServerCoreServiceBase.cs
+2
-1
Modified
XFEExtension.NetCore.ServerInteractive/Interfaces/CoreService/IXFEServerCoreServiceBase.cs
+6
-1
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCore.cs
+22
-11
XFEstudio/XFEExtension.NetCore.ServerInteractive
支持非标准Json及请求对象注入到服务层
新增 AutoUnescapeJson 和 AcceptNonStandardJson 属性,允许服务端处理非标准Json字符串。IXFEServerCoreServiceBase 增加 HttpListenerRequest 属性,服务实例流程中注入当前请求对象。优化 execute 字段容错处理,细化 Handled 属性注释。
1e1f818
代码差异
3 个文件
+30
-13
@@ -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
@@ -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>
@@ -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();