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.TServer/Program.cs
+1
-1
Modified
XFEExtension.NetCore.ServerInteractive/Implements/Requester/StandardRequestServiceBase.cs
+5
-0
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Extensions/XFEClientRequesterBuilderExtensions.cs
+1
-1
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Extensions/XFEServerCoreBuilderExtensions.cs
+7
-10
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/LoginRequestService.cs
+6
-0
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/ReloginRequestService.cs
+6
-0
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequesterBuilder.cs
+31
-2
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/EntryPointVerifyService.cs
+1
-10
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCoreBuilder.cs
+32
-3
XFEstudio/XFEExtension.NetCore.ServerInteractive
Complete refactoring: update server and client builders to use EntryPointList/RouteList pattern
Agent-Logs-Url: https://github.com/XFEstudio/XFEExtension.NetCore.ServerInteractive/sessions/4d531def-27a7-4750-a4b4-a682ae0549eb Co-authored-by: XFEstudio <132526994+XFEstudio@users.noreply.github.com>
50067e2
代码差异
9 个文件
+90
-27
@@ -26,7 +26,7 @@ var server = XFEServerBuilder.CreateBuilder() // 创建服务器构建器
26
26
.AddTable<Order, DataProfile>("订单", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员) // 添加名为订单的表格Order 类 型, AutoConfig 为 DataProfile。添加更改获取权限为业务员,移除权限为经理
27
27
.AddTable<User, UserProfile>("用户", (int)UserRole.经理, (int)UserRole.经理, (int)UserRole.经理, (int)UserRole.业务员); // 添加名为用户的表格User类 型, AutoConfig为 UserProfile。获取权限为业务员,添加移除更改权限为经理
28
28
})
29
.AddStandardService<TestCoreService>("test")
29
.AddStandardService<TestCoreService>()
30
30
.Build(options =>
31
31
{
32
32
options.BindIP("http://localhost:3305/")
@@ -8,6 +8,11 @@ namespace XFEExtension.NetCore.ServerInteractive.Implements.Requester;
8
8
/// </summary>
9
9
public abstract class StandardRequestServiceBase : IStandardRequestService
10
10
{
11
/// <summary>
12
/// 此服务对应的路由列表(由派生类定义)
13
/// </summary>
14
public static List<string> RouteList { get; } = new();
15
11
16
/// <inheritdoc/>
12
17
public string Session { get => XFEClientRequester.Session; set => XFEClientRequester.Session = value; }
13
18
/// <inheritdoc/>
@@ -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.AddRequest<LoginRequestService<T>>("login").AddRequest<ReloginRequestService<T>>("relogin");
78
public XFEClientRequesterBuilder AddLoginRequest<T>() where T : IUserFaceInfo => xFEClientRequesterBuilder.AddRequest<LoginRequestService<T>>().AddRequest<ReloginRequestService<T>>();
79
79
80
80
/// <summary>
81
81
/// 使用XFE标准服务器服务请求
@@ -26,14 +26,14 @@ public static class XFEServerCoreBuilderExtensions
26
26
xFEServerCoreBuilder.AddParameter("TableManager", xFEDataTableManagerBuilder.Build(getUserFunction, getEncryptedUserLoginModelFunction));
27
27
28
28
// Register the service for each table operation route
29
// Convert old format "get_tableName" to new format "table/get/tableName"
29
// XFEDataTableManagerService uses dynamic routing, so we use AddStandardServiceWithRoute
30
30
foreach (var execute in xFEDataTableManagerBuilder.ExecuteList)
31
31
{
32
32
var parts = execute.Split('_', 2);
33
33
if (parts.Length == 2)
34
34
{
35
35
var route = $"table/{parts[0]}/{parts[1]}";
36
xFEServerCoreBuilder.AddStandardService<XFEDataTableManagerService>(route);
36
xFEServerCoreBuilder.AddStandardServiceWithRoute<XFEDataTableManagerService>(route);
37
37
}
38
38
}
39
39
@@ -63,17 +63,15 @@ public static class XFEServerCoreBuilderExtensions
63
63
/// </summary>
64
64
/// <typeparam name="T">登录返回用户接口类型</typeparam>
65
65
/// <returns></returns>
66
public XFEServerCoreBuilder AddStandardLoginService<T>() where T : class => xFEServerCoreBuilder.AddStandardService<UserLoginService<T>>("user/login")
67
.AddStandardService<UserReloginService<T>>("user/relogin")
66
public XFEServerCoreBuilder AddStandardLoginService<T>() where T : class => xFEServerCoreBuilder.AddStandardService<UserLoginService<T>>()
67
.AddStandardService<UserReloginService<T>>()
68
68
.AddService<UserLoginAutoCleanService>();
69
69
70
70
/// <summary>
71
71
/// 添加IP封禁服务
72
72
/// </summary>
73
73
/// <returns></returns>
74
public XFEServerCoreBuilder AddIPBannerService() => xFEServerCoreBuilder.AddStandardService<IPBannerService>("ip/banned/get")
75
.AddStandardService<IPBannerService>("ip/banned/add")
76
.AddStandardService<IPBannerService>("ip/banned/remove");
74
public XFEServerCoreBuilder AddIPBannerService() => xFEServerCoreBuilder.AddStandardService<IPBannerService>();
77
75
78
76
/// <summary>
79
77
/// 添加日期统计服务
@@ -91,7 +89,7 @@ public static class XFEServerCoreBuilderExtensions
91
89
/// 添加连接检查服务
92
90
/// </summary>
93
91
/// <returns></returns>
94
public XFEServerCoreBuilder AddConnectService() => xFEServerCoreBuilder.AddStandardService<ConnectService>("connect");
92
public XFEServerCoreBuilder AddConnectService() => xFEServerCoreBuilder.AddStandardService<ConnectService>();
95
93
96
94
/// <summary>
97
95
/// 添加服务器入口点校验
@@ -103,8 +101,7 @@ public static class XFEServerCoreBuilderExtensions
103
101
/// 添加服务器日志请求
104
102
/// </summary>
105
103
/// <returns></returns>
106
public XFEServerCoreBuilder AddServerLogService() => xFEServerCoreBuilder.AddStandardService<CoreLogService>("log/get")
107
.AddStandardService<CoreLogService>("log/clear");
104
public XFEServerCoreBuilder AddServerLogService() => xFEServerCoreBuilder.AddStandardService<CoreLogService>();
108
105
109
106
/// <summary>
110
107
/// 使用XFE标准服务器核心
@@ -12,6 +12,12 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester.Services;
12
12
public class LoginRequestService<T> : StandardRequestServiceBase where T : IUserFaceInfo
13
13
{
14
14
private readonly JsonSerializerOptions _jsonSerializerOptions = new();
15
16
/// <summary>
17
/// 路由列表
18
/// </summary>
19
public new static List<string> RouteList { get; } = new() { "user/login" };
20
15
21
/// <summary>
16
22
/// 登录请求服务
17
23
/// </summary>
@@ -11,6 +11,12 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.Requester.Services;
11
11
public class ReloginRequestService<T> : StandardRequestServiceBase where T : IUserFaceInfo
12
12
{
13
13
private readonly JsonSerializerOptions _jsonSerializerOptions = new();
14
15
/// <summary>
16
/// 路由列表
17
/// </summary>
18
public new static List<string> RouteList { get; } = new() { "user/relogin" };
19
14
20
/// <summary>
15
21
/// 登录校验请求服务
16
22
/// </summary>
@@ -46,12 +46,41 @@ public abstract class XFEClientRequesterBuilder : XFEBuilderBase<XFEClientReques
46
46
}
47
47
48
48
/// <summary>
49
/// 添加标准请求器
49
/// 添加标准请求器(从RouteList自动获取路由)
50
/// </summary>
51
/// <typeparam name="T">请求服务泛型</typeparam>
52
/// <returns></returns>
53
public XFEClientRequesterBuilder AddRequest<T>() where T : IStandardRequestService, new()
54
{
55
// 从T的静态RouteList属性获取所有路由
56
var routeListProperty = typeof(T).GetProperty("RouteList", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
57
if (routeListProperty is null)
58
throw new InvalidOperationException($"类型 {typeof(T).Name} 没有静态的 RouteList 属性");
59
60
var routeList = routeListProperty.GetValue(null) as List<string>;
61
if (routeList is null || routeList.Count == 0)
62
throw new InvalidOperationException($"类型 {typeof(T).Name} 的 RouteList 为空");
63
64
// 为每个路由注册服务工厂
65
foreach (var route in routeList)
66
{
67
_standardRequestServiceDictionary.Add(route, () =>
68
{
69
var inst = new T();
70
ApplyParameter(inst);
71
return inst;
72
});
73
}
74
return this;
75
}
76
77
/// <summary>
78
/// 添加标准请求器(手动指定路由,用于向后兼容或特殊场景)
50
79
/// </summary>
51
80
/// <typeparam name="T">请求服务泛型</typeparam>
52
81
/// <param name="serviceName">请求服务名称</param>
53
82
/// <returns></returns>
54
public XFEClientRequesterBuilder AddRequest<T>(string serviceName) where T : IStandardRequestService, new()
83
public XFEClientRequesterBuilder AddRequestWithRoute<T>(string serviceName) where T : IStandardRequestService, new()
55
84
{
56
85
_standardRequestServiceDictionary.Add(serviceName, () =>
57
86
{
@@ -19,16 +19,7 @@ public class EntryPointVerifyService : ServerCoreVerifyServiceBase
19
19
throw Error("您的IP已被封禁", HttpStatusCode.Forbidden);
20
20
}
21
21
22
// 使用XFEServerCore的MainEntryPoint属性进行主入口点校验(如果配置了)
23
if (!string.IsNullOrEmpty(XFEServerCore.MainEntryPoint))
24
{
25
if (Request.Url?.Segments.Length < 2 || $"{Request.Url?.Segments[0]}{Request.Url?.Segments[1]}".TrimEnd('/') != $"/{XFEServerCore.MainEntryPoint}" || Request.HttpMethod != "POST")
26
{
27
Console.WriteLine("-校验失败");
28
throw Error("请求的API接口不正确", HttpStatusCode.BadGateway);
29
}
30
}
31
else if (Request.HttpMethod != "POST")
22
if (Request.HttpMethod != "POST")
32
23
{
33
24
Console.WriteLine("-校验失败");
34
25
throw Error("请求方法必须为POST", HttpStatusCode.MethodNotAllowed);
@@ -65,12 +65,41 @@ public abstract class XFEServerCoreBuilder : XFEBuilderBase<XFEServerCoreBuilder
65
65
}
66
66
67
67
/// <summary>
68
/// 注册标准服务(使用路由路径)
68
/// 注册标准服务(从EntryPointList自动获取路由路径)
69
69
/// </summary>
70
70
/// <typeparam name="T">服务泛型</typeparam>
71
/// <param name="route">路由路径(例如:user/login)</param>
72
71
/// <returns>XFE服务器核心构建器</returns>
73
public XFEServerCoreBuilder AddStandardService<T>(string route) where T : IServerCoreStandardService, new()
72
public XFEServerCoreBuilder AddStandardService<T>() where T : IServerCoreStandardService, new()
73
{
74
// 从T的静态EntryPointList属性获取所有路由路径
75
var entryPointListProperty = typeof(T).GetProperty("EntryPointList", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
76
if (entryPointListProperty is null)
77
throw new InvalidOperationException($"类型 {typeof(T).Name} 没有静态的 EntryPointList 属性");
78
79
var entryPointList = entryPointListProperty.GetValue(null) as List<string>;
80
if (entryPointList is null || entryPointList.Count == 0)
81
throw new InvalidOperationException($"类型 {typeof(T).Name} 的 EntryPointList 为空");
82
83
// 为每个入口点注册服务工厂
84
foreach (var route in entryPointList)
85
{
86
_serverStandardCoreServiceDictionary.Add(route, () =>
87
{
88
var inst = new T();
89
ApplyParameter(inst);
90
return inst;
91
});
92
}
93
return this;
94
}
95
96
/// <summary>
97
/// 注册标准服务(手动指定路由路径,用于动态路由场景)
98
/// </summary>
99
/// <typeparam name="T">服务泛型</typeparam>
100
/// <param name="route">路由路径(例如:table/get/order)</param>
101
/// <returns>XFE服务器核心构建器</returns>
102
public XFEServerCoreBuilder AddStandardServiceWithRoute<T>(string route) where T : IServerCoreStandardService, new()
74
103
{
75
104
_serverStandardCoreServiceDictionary.Add(route, () =>
76
105
{