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

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
anthropic-code-agent[bot] <242468646+Claude@users.noreply.github.com>
提交于

代码差异

9 个文件 +90 -27
Modified XFEExtension.NetCore.ServerInteractive.TServer/Program.cs +1 -1
@@ -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/")
Modified XFEExtension.NetCore.ServerInteractive/Implements/Requester/StandardRequestServiceBase.cs +5 -0
@@ -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/>
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Extensions/XFEClientRequesterBuilderExtensions.cs +1 -1
@@ -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标准服务器服务请求
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Extensions/XFEServerCoreBuilderExtensions.cs +7 -10
@@ -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标准服务器核心
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/LoginRequestService.cs +6 -0
@@ -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>
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/Services/ReloginRequestService.cs +6 -0
@@ -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>
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Requester/XFEClientRequesterBuilder.cs +31 -2
@@ -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 {
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/EntryPointVerifyService.cs +1 -10
@@ -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);
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCoreBuilder.cs +32 -3
@@ -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 {