项目信息
- Gitee:https://gitee.com/dotnetchina/Furion
 - Github:https://github.com/MonkSoul/Furion
 - 文档:https://dotnetchina.gitee.io/furion
 
本期更新
-  
新特性
- [新增] 粘土对象支持任何字符作为 
JSON/XML键 4.8.6.9 ⏱️2023.02.19 #note_16329657 - [新增] 动态 
WebAPI自动检查路由是否包含重复参数,如果有自动修正而不是抛异常 4.8.6.5 ⏱️2023.02.17 5f15ea1 - [新增] 
byte[]类型MD5加密/比较重载方法 4.8.6.3 ⏱️2023.02.15 #I6F1NT - [新增] 动态 
WebAPI支持[RouteConstraint(":*")]路由约束 4.8.6.2 ⏱️2023.02.10 #I6E6JA - [新增] 
Swagger启用登录后配置CheckUrl可获取本地存储的Authorization请求报文头 4.8.6.2 ⏱️2023.02.10 #I6E3LB - [新增] 多语言支持 
.json文件配置方式(推荐) 4.8.6 ⏱️2023.02.08 #I6DL71 #I5DXKP - [新增] 定时任务 
IScheduler.[Try]UpdateDetail(builder => {})和IScheduler.[Try]UpdateTrigger(triggerId, builder => {})重载方法 4.8.6 ⏱️2023.02.08 6e43a54 
 - [新增] 粘土对象支持任何字符作为 
 -  
突破性变化
- [升级] 适配 
.NET7.0.3和.NET6.0.144.8.6.3 ⏱️2023.02.15 eecbf83 - [调整] 动态 
WebAPI生成路由[HttpMethod(template)]规则 4.8.5.7 ⏱️2023.02.03 #I6CLPT 
 - [升级] 适配 
 -  
问题修复
- [修复] 
Serve.Run()因 #I6G02W 更改导致不配置端口时出现异常无法启动问题 4.8.6.10 ⏱️2023.02.20 #I6G6AR - [修复] 粘土对象不支持 
数字作为JSON/XML键问题 4.8.6.9 ⏱️2023.02.19 #note_16329657 - [修复] 动态 
WebAPI不支持嵌套继承[Route]特性问题 4.8.6.8 ⏱️2023.02.18 #I6CLPT - [修复] 
Serve.Run(urls: "端口")设置端口在.NET6/7下发布后始终是80端口问题 4.8.6.6 ⏱️2023.02.18 #I6G02W - [修复] 粘土对象不支持 
中文作为JSON/XML键问题 4.8.6.6 ⏱️2023.02.18 4961e01 - [修复] 远程请求代理模式配置了 
WithEncodeUrl = false无效问题 4.8.6.4 ⏱️2023.02.16 89639ba - [修复] 动态 
WebAPI自定义[HttpMethod(template)]之后生成错误路由 4.8.6.1 ⏱️2023.02.08 59fe53b 
 - [修复] 
 -  
其他更改
- [调整] 脱敏处理 
sensitive-words.txt嵌入文件支持UTF8 BOM编码,感谢 @man119 4.8.6.7 ⏱️2023.02.18 #I6G1JN - [调整] 
Serve.Run()迷你主机默认添加JSON中文乱码处理 4.8.6.3 ⏱️2023.02.15 86b5f9f 
 - [调整] 脱敏处理 
 -  
文档
- [新增] 多语言 
.json配置方式文档 - [更新] 日志文档、定时任务文档、动态 
WebAPI文档,规范化结果文档,App静态类文档,Oops静态类文档、虚拟文件系统文档 !704,远程请求文档,序列化文档、入门文档、脱敏模块文档 
 - [新增] 多语言 
 -  
贡献者
- Andy (@man119)
 - liuhll (@liuhll2)
 - 大柚 (@big-pomelo)
 - WR_YT (@wr-yt)
 
 
本期亮点
1. 新增定时任务更新作业信息和作业触发器方法
- 更新作业信息
 
 // 返回 ScheduleResult 类型 var scheduleResult = Scheduler.TryUpdateDetail(jobBuilder => {       jobBuilder.SetDescription("~~~"); }, out var jobDetail);  // 无返回值 scheduler.UpdateDetail(jobBuilder => {       jobBuilder.SetDescription("~~~"); });   - 更新作业触发器
 
 // 返回 ScheduleResult 类型 var scheduleResult = scheduler.TryUpdateTrigger("triggerId", triggerBuilder => {       triggerBuilder.SetDescription("~~"); }, out var trigger);  // 无返回值 scheduler.UpdateTrigger("triggerId", triggerBuilder => {       triggerBuilder.SetDescription("~~"); });   2. 新增多语言 .json 文件配置支持
https://furion.baiqian.ltd/docs/local-language#2111-基于-json-文件多语言
 L.Text["Furion"];   // => 如果设置为英文,但是没有文件,则直接输出 “Furion”   3. 动态 WebAPI 路由规则小调整
在过去,TestMethod 生成路由为:/mytest
 // 注意这里没有 [Route] 特性 public class ClassService: IDynamicApiController {     [HttpPost("mytest")]     public void TestMethod()     {     } }   新版本:TestMethod 生成路由为:/api/class/mytest,TestMethod2 生成路由为:/mytest。
 // 注意这里没有 [Route] 特性 public class ClassService: IDynamicApiController {     [HttpPost("mytest")]     public void TestMethod()     {     }      [HttpPost("/mytest")]     public void TestMethod2()     {     } }   也就是新版本如果不需要自动添加前缀,需在前面添加 /,旧版本不需要。
4. 动态 WebAPI 路由约束 [RouteConstraint(":*")] 支持
 public class TestService: DynamicApiController {     // 生成的路由为:/api/test/catch-all1/{*path}     [HttpGet]     public string CatchAll1([RouteConstraint(":*")] string path)     {         return path;     }      // 生成的路由为:/api/test/aaa/bbb/ccc/{*path}     [HttpGet("aaa/bbb/ccc")]     public string CatchAll2([RouteConstraint(":*")] string path)     {         return path;     }      // 生成的路由为:/aaa/bbb/ccc/{*path}     [HttpGet("/aaa/bbb/ccc/{*path}")]     public string CatchAll3(string path)     {         return path;     } }   5. 新增 MD5 加密支持 byte[] 类型参数
 // Furion 4.8.6.3+ 版本支持 byte[] 类型,如获取文件 MD5 Hash var bytes = File.ReadAllBytes("image.png"); var md5Hash = MD5Encryption.Encrypt(bytes); // 加密 var isEqual = MD5Encryption.Compare(bytes, md5Hash);  // 比较   6. 支持路由模板带重复参数
 public class WithClass : IDynamicApiController {     [HttpGet("system/role/deptTree/{roleId}")]  // 过去版本抛异常,Furion 4.8.6.5+ 正常~     public string GetResult2(string roleId)     {         return nameof(Furion);     } }   过去版本会抛异常,新版本不会。
7. 粘土对象支持任何字符作为键
 // 数字作为键 var str = "{\"data\": {\r\n  \"16347413030322\": {\r\n    \"componentType\": \"@ali/tdmod-od-pc-offer-discount\",\r\n    \"trackInfo\": {},\r\n    \"data\": {\r\n      \"couponList\": [{ \"couponType\": \"CARD\", \"couponContent\": \"1件混批\" }],\r\n      \"pageName\": \"Page_GetCoupon\"\r\n      }\r\n    }\r\n  }\r\n}"; var a = Clay.Parse(str); var a1 = a["data"]["16347413030322"]["componentType"]; Console.WriteLine(a1);  // 中文作为键 var str1 = "{\"data\": {\r\n  \"中文\": {\r\n    \"componentType\": \"@ali/tdmod-od-pc-offer-discount\",\r\n    \"trackInfo\": {},\r\n    \"data\": {\r\n      \"couponList\": [{ \"couponType\": \"CARD\", \"couponContent\": \"1件混批\" }],\r\n      \"pageName\": \"Page_GetCoupon\"\r\n      }\r\n    }\r\n  }\r\n}"; var b = Clay.Parse(str1); var b1 = b["data"]["中文"]["componentType"]; Console.WriteLine(b1);  // 符号作为键 var str2 = "{\"data\": {\r\n  \"~\": {\r\n    \"componentType\": \"@ali/tdmod-od-pc-offer-discount\",\r\n    \"trackInfo\": {},\r\n    \"data\": {\r\n      \"couponList\": [{ \"couponType\": \"CARD\", \"couponContent\": \"1件混批\" }],\r\n      \"pageName\": \"Page_GetCoupon\"\r\n      }\r\n    }\r\n  }\r\n}"; var c = Clay.Parse(str2); var c1 = c["data"]["~"]["componentType"]; Console.WriteLine(c1);  // 大杂烩作为键 var str3 = "{\"data\": {\r\n  \"^123,中文~,!\": {\r\n    \"componentType\": \"@ali/tdmod-od-pc-offer-discount\",\r\n    \"trackInfo\": {},\r\n    \"data\": {\r\n      \"couponList\": [{ \"couponType\": \"CARD\", \"couponContent\": \"1件混批\" }],\r\n      \"pageName\": \"Page_GetCoupon\"\r\n      }\r\n    }\r\n  }\r\n}"; var d = Clay.Parse(str3); var d1 = c["data"]["^123,中文~,!"]["componentType"]; Console.WriteLine(d1);     文档更新









		
		
		

还没有评论,来说两句吧...