1.6 更新日志
此章节只记录重大版本更新日志,小迭代版本不做记录。想了解更多更新内容,可查阅 CHANGELOG.md
v3.1.2(当前版本)
新特性
突破性变化
- [升级]
.NET6
依赖包全部升级至Nuget
最新版v6.0.3
- [升级]
问题修复
其他更改
- [过时] 标记
Furion.Extras.Logging.Serilog
拓展包IWebHost
拓展为过时状态
- [过时] 标记
文档
- [文档] 优化文档体验,新增面包屑导航,重写文档缓存,提升文档访问速度
- [文档] 更新动态 API 文档、配置文档、远程请求文档
- [文档] 更新二级虚拟目录文档
- 本期亮点
- 新增动态
WebApi
支持小驼峰路径,如GetMyName
->getMyName
:
{
"DynamicApiControllerSettings": {
"LowercaseRoute": false,
"KeepName": true,
"AsLowerCamelCase": true
}
}
- 支持
.NET6 WebApplication
模式二级虚拟目录配置:
app.UseVirtualPath(app =>
{
app.UseInject(String.Empty); // 注意 String.Empty 只是例子,可以不填或填其他的,见一分钟入门
app.MapRouteControllers();
});
v3.0.0(已发布)
v3+ 版本说明
Furion v3.x 版本采用 .NET6 构建。
新特性
- [新增] 远程请求支持
GET
请求自动转换类类型
类型对象 #I4HR5Q
- [新增] 远程请求支持
突破性变化
- [升级] 全面支持
.NET6
版本
- [升级] 全面支持
问题修复
其他更改
- [移除]
ToPagedList
泛型约束 d0244d
- [移除]
文档
- [文档] 查看 .NET6 一分钟入门
- [文档] 查看 Furion v2 升级 v3
特别鸣谢
v2.20(已发布)
v2.20+ 版本说明
在 Furion v2.20+
版本后采用 Jaina 事件总线替换原有的 EventBus
新特性
- [新增] 远程请求支持
GET
请求自动转换类类型
类型对象 #I4HR5Q
- [新增] 远程请求支持
突破性变化
- [重构]
EventBus
模块,采用 Jaina 方式
- [重构]
问题修复
- [修复] 开启规范化结果并自定义全局异常导致异常经过
OnSucceeded
过滤器 bug #I4DTVL - [修复]
.NET5.0.5+
微软底层修改了[ApiController]
验证失败返回IActionResult
类型 #I4ISOK - [修复] 远程请求上传文件异常 0c0752
- [修复] 框架启动不支持环境变量
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
配置 !438 - [修复] 定时任务内存和 CPU 占用及特殊情况下空异常问题 12c65de
- [修复] 默认控制器启用规范化结果无效 bugc7a4a5e
- [修正] 依赖注入
InjectionAttribute
特性的ExceptInterfaces
单词拼写错误问题 !436 - [修复]
Sql
命令参数传入Clay
类型异常问题 #I4D21Q
- [修复] 开启规范化结果并自定义全局异常导致异常经过
其他更改
文档
- [新增] 事件总线新文档
v2.19(已发布)
新特性
- [新增] 定时任务监听器
ISpareTimeListener
#I468Q1 - [新增] 执行
Sql
支持JsonElement
参数 61985d6 - [新增]
Swagger
配置枚举及标签排序过滤器 #I46LON !404 - [新增] 远程请求
application/octet-stream
类型默认支持 d9bad03 - [新增] 远程请求代理模式请求报文头支持
IDictionary<string ,object>
类型。0204c0a - [新增]
MongoDB
拓展类,添加更多常用操作方法 !423 - [新增]
DateTimeOffset?
转换DateTime
拓展(包含互换) !432
- [新增] 定时任务监听器
问题修复
- [修复]
Scoped.Create
在EFCore
进行Add-Migration
时候报空异常问题,原因是在PM
环境中不存在根服务0853e74 - [修复] 定时任务执行异常后异常一直驻留内存问题,修正为执行成功自动清空过去异常 197a62b
- [修复]
Jwt
拓展包不正确的代码导致 IOptions 失效#I46LUP - [修复]
Swagger
枚举Schema
过滤器不输出值问题 #I46LON !404 - [修复]
Swagger
处理非int
类型枚举转换 bug #I46QJ9 - [修复] 视图引擎编译模板生成
dll
后再次加载出现IL
格式化错误问题 ff52d38 - [修复] 管道
Channel
读取器无法释放Handler
对象问题 10f4a90 - [修复]
Worker Services
下日志不输出问题 c482548 - [修复] 远程请求
multipart/form-data
类型对接微信小程序上传文件 问题 d9bad03 - [修复] 工作单元上下文在某些情况下共享事务失效问题 006d439
- [修复]
Swagger
枚举值在GET
请求中Schema
显示不正确问题 fb72fd7 - [修复] 远程请求
404
不走异常过滤器问题 !426 - [修复] 自定义事件总线并发情况下调用完成后无法正确处理队列数据 !429
- [修复]
v2.19+
版本之后模块化开发加载外部程序集失效问题 !433 - [修复] 定时任务 SpareTime 频繁检查导致 CPU 增高问题 aa0a2ee
- [修复]
特别鸣谢
v2.18(已发布)
新特性
突破性变化
在过去,很多开发者总是喜欢在
Startup.cs
配置服务的ConfigureService
方法中解析服务,这样导致内存存在溢出风险,GC 无法回收。 正确的方式是尽可能的避免ConfigureService
中解析服务。如果需要在【启动时】获取配置选项
,请使用App.GetConfig<TOptions>(路径, true)
代替App.GetOptions<TOption>
。
问题修复
文档
- [新增] 包管理工具文档
- [更新] 模板引擎、
Sql
操作,数据库上下文
等等文档
v2.17(已发布)
新特性
- [新增]
IPC(Inter-Process Communication,进程间通信)
模块功能,目前提供进程内通信和共享内存进程外通讯 ProcessChannel - [新增] 远程请求
application/xml
和text/xml
默认支持 4753a1a - [新增] 控制台全局异常拦截 4a4fe1f
- [新增] 支持自定义
.json
配置文件扫描目录 3e2910a - [新增] 支持数据库实体接口显式实现接口配置 9610a0a
- [新增] 控制台应用程序全局拦截
[IfException]
支持 4a4fe1f - [新增] 依赖注入模块接口可以限制实现类生存周期,实现类也支持复写生存周期 d2ce089
- [新增]
突破性变化
问题修复
其他更改
- [调整] Swagger 生成泛型 SchemaIds 默认连接符,由
Of
改为_
81946b6
- [调整] Swagger 生成泛型 SchemaIds 默认连接符,由
v2.16(已发布)
新特性
突破性变化
新版本自定义规范化结果
using Furion.DataValidation;
using Furion.DependencyInjection;
using Furion.UnifyResult.Internal;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Threading.Tasks;
namespace Furion.UnifyResult
{
/// <summary>
/// RESTful 风格返回值
/// </summary>
[SuppressSniffer, UnifyModel(typeof(RESTfulResult<>))]
public class RESTfulResultProvider : IUnifyResultProvider
{
/// <summary>
/// 异常返回值
/// </summary>
/// <param name="context"></param>
/// <param name="metadata"></param>
/// <returns></returns>
public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata)
{
return new JsonResult(RESTfulResult(metadata.StatusCode, errors: metadata.Errors));
}
/// <summary>
/// 成功返回值
/// </summary>
/// <param name="context"></param>
/// <param name="data"></param>
/// <returns></returns>
public IActionResult OnSucceeded(ActionExecutedContext context, object data)
{
return new JsonResult(RESTfulResult(StatusCodes.Status200OK, true, data));
}
/// <summary>
/// 验证失败返回值
/// </summary>
/// <param name="context"></param>
/// <param name="metadata"></param>
/// <returns></returns>
public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata)
{
return new JsonResult(RESTfulResult(StatusCodes.Status400BadRequest, errors: metadata.ValidationResult));
}
/// <summary>
/// 特定状态码返回值
/// </summary>
/// <param name="context"></param>
/// <param name="statusCode"></param>
/// <param name="unifyResultSettings"></param>
/// <returns></returns>
public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings)
{
// 设置响应状态码
UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings);
switch (statusCode)
{
// 处理 401 状态码
case StatusCodes.Status401Unauthorized:
await context.Response.WriteAsJsonAsync(RESTfulResult(statusCode, errors: "401 Unauthorized")
, App.GetOptions<JsonOptions>()?.JsonSerializerOptions);
break;
// 处理 403 状态码
case StatusCodes.Status403Forbidden:
await context.Response.WriteAsJsonAsync(RESTfulResult(statusCode, errors: "403 Forbidden")
, App.GetOptions<JsonOptions>()?.JsonSerializerOptions);
break;
default: break;
}
}
/// <summary>
/// 返回 RESTful 风格结果集
/// </summary>
/// <param name="statusCode"></param>
/// <param name="succeeded"></param>
/// <param name="data"></param>
/// <param name="errors"></param>
/// <returns></returns>
private static RESTfulResult<object> RESTfulResult(int statusCode, bool succeeded = default, object data = default, object errors = default)
{
return new RESTfulResult<object>
{
StatusCode = statusCode,
Succeeded = succeeded,
Data = data,
Errors = errors,
Extras = UnifyContext.Take(),
Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
};
}
}
}
问题修复
- [修复]
MVC
控制器启用规范化处理后返回new Json({})
对象为null
问题 #I4354S
- [修复]
其他更改
- [优化] 多语言底层设计,取消需要创建
Lang.cs
空类的要求 #I434YJ - [优化]
MiniProfiler
性能,减少不必要的监听
- [优化] 多语言底层设计,取消需要创建
v2.15(已发布)
新特性
问题修复
其他更改
- [优化] 系统启动性能,从 106M 减少到 84M
- [优化] 大量底层代码,包大小从 391Kb 减少到 350Kb(不带注释版本仅 64Kb)
v2.13/v2.14(已发布)
新特性
突破性变化
问题修复
其他更改
v2.10/2.11/2.12 (已发布)
该版本有多个破坏性更改,更新时请认真查看。
新特性
- [新增]
App.Configuration.Reload()
拓展 #I3XYI8 - [新增]
ISubscribeHandler
支持异步方法定义 #I3XYHJ - [新增]
app.UseUnifyResultStatusCodes()
可配置修改返回状态码 #I3VZQH - [新增] 远程请求添加默认
User-Agent
头 #I3W17C - [新增] 支持
Sql
高级代理切换数据库上下文定位器 #I3XFP6 #I3XDCR - [新增] 定时任务
CronFormat
自动识别 #I3Y7GT - [新增]
Sql 高级代理
拦截功能 #I3YHG4 - [新增] 拦截远程请求所有异常处理 #I3YPDE
- [新增] 远程请求配置
Timeout
超时时间 #I3YPPK - [新增] 新增
RSA
加密算法 #I3YZNU !345 - [新增]
DataTable
和DataSet
支持不指定强类型返回 #I3Z6RI - [新增]
Sql
字符串拓展方法设置Timeout
超时时间 #I3ZKWF - [新增]
Sql
高级代理[Timeout]
特性,设置超时时间 #I3ZKWF
- [新增]
突破性变化
- [移除]
FakeDelete
假删除/软删除所有功能 #I3XKII - [移除] 移除
PBKDF2
加密算法 #I3Z0IO - [调整] 远程请求设置超时时间单位由
分钟
改为秒
#I3YPPK - [调整]
IJsonSerializerProvider
接口参数,新增inherit
参数 #I3ZQU5 - [调整]
[NonAutomatic]
特性名称为[Manual]
#I3XKKX - [调整]
[NotChangedListener]
特性名称为[SuppressChangedListener]
#I3XKLZ - [调整]
[ManualSaveChanges]
名称为[ManualCommit]
#I3XKNP - [调整]
DbContext.TenantIdQueryFilterExpression
名称为DbContext.BuildTenantQueryFilter
#I3XKTB - [调整]
[SkipScan]
名称为[SuppressSniffer]
#I3XN5N - [调整]
[SkipProxy]
名称为[SuppressProxy]
#I3XN7O - [重构]
Sql
执行,性能提升 20% #I3W33U
- [移除]
问题修复
- [修复] 动态 WebAPI 扫描控制器没有屏蔽没有注册的第三方控制器 #I3Y7TJ
- [修复]
AppDbContext
设置TablePrefix
无效: #I3Y57Q - [修复] 修复定时任务使用异步委托导致程序终止 bug #I3XVZ0
- [修复] 事件总线一个
消息id
对应多个Handler
只触发第一个#I3XYP0 - [修复]
.ToPagedList()
分页方法传入小于或等于 0 的页码 #I3XNAN - [修复]
JSON
序列化默认DateTimeOffset
异常 #I3XMOL - [修复] 继承
Serilog
日志在Worker Service
生成重复日志 bug #I3WA0L !331 - [修复]
粘土对象
动态添加Clay
类型 bug #I3W9LW - [修复]
ValidationTypes.Numeric
校验数值类型正则表达式错误 #I3WADS - [修复] 数据库命令参数
DbParameter
的Value
是object
类型的时候且不指定 #I3YKM6 - [修复]
Oracle
数据库存储过程游标参数
报错问题 #I3ZBYE - [修复]
Worker Services
采用独立发布后无法执行问题 #I3ZH3X - [修复] 修复远程请求如果无返回值序列化异常问题 !348
其他更改
文档变化
问答答疑
- [答疑]
dapper
多个数据源如何继承 #I3WUOI - [答疑] 关于
SpareTime
多次执行问题#I3XEQU - [答疑] 选项更改通知(热更新):数据库里的数据更改了如何通知选项进行改变? #I3XYI8
- [答疑]
SaaS
多租户添加时无法获取租户Id
#I3Y5CF - [答疑] 获取
_httpContextAccessor.HttpContext
为空#I3Y6BI - [答疑]
Ubuntu
中使用App.Configuration
方法读取不到值 #I3Y74H - [答疑] 数据库上下文作用域问题 #I3YHXP
- [答疑] 使用
UnitofWork
提交事务,可以提交成功,但是系统会有错误 #I3YIWU - [答疑] 数据库读写分离--非默认主库的从库随机该如何配置? #I3YVR7
- [答疑]
不做实现
- [废弃]
SpareTIme
新增Dashboard
控制台看板,同时可以对任务进行暂停、删除、查看#I3XELY
- [废弃]
v2.9.0 (已发布)
新特性
突破性变化
问题修复
其他更改
- [优化] 运行时内存,实现请求结束自动释放未托管资源 #I3VXAU
文档变化
- [更新]
App
静态类文档、远程请求文档、分表分库文档
- [更新]
问答答疑
- [答疑] 动态 WebAPI,自定义根据方法名生成 [HttpMethod] 规则报错 #I3VKQG
- [答疑]
InsertAsync
的时候提示ID
为空 #I3VS7E - [答疑]
FirstOrDefault
自动过滤了TanantId
字段 #I3W0VH - [答疑] 对方接口返回
HttpConnectionResponseContent
远程请求拿不到返回值 #I3W17C - [答疑] 查询方法
FindOrDefault
报错 #I3W830 - [答疑]
SqlNonQuery
在UnitOfWork
循环执行#I3W8WW - [答疑] 因
Swagger
配置问题,导致Swagger
中不能自动携带 token 授权的问题 #I3W934 - [答疑] 远程请求
SetBody
参数识别不了#I3WBM1 - [答疑]
Scoped.Create
里执行sql.SqlNonQuery()
或者obj.insert()
问题#I3WB5O - [答疑] 调用函数或存储过程,怎么出参数据自定义对象?如
Oracle
数据库的数组或记录 #I3W71W
不做实现
v2.7.0/2.8.0 (已发布)
新特性
- [新增]
throw Oops.On("异常消息")
应用多语言支持 #I3UYC2 - [新增]
Db.GetMSRepository()
获取主从库仓储静态方法 #I3UBSJ - [新增] 工作单元特性,支持静态类强制性开启共享事务 #I3S9N8
- [新增]
EFCore
执行sql
模式打印日志 #I3SE8X - [新增] 远程请求支持默认
HttpClient
配置 #I3SI17 - [新增] 新增
短 ID
生成功能 #I3T7JP - [新增]
[SensitiveDetection]
支持配置替换敏感词汇 #I3THIA - [新增]
SpecificationDocumentBuilder.DocumentGroups
和SpecificationDocumentBuilder.CheckApiDescriptionInCurrentGroup(currentGroup, apiDescription)
公开方法#I3UDSY
- [新增]
突破性变化
问题修复
- [修复]
[DataValidation]
和[SensitiveDetection]
多语言应用失效 #I3UH6U - [修复]
Scoped
系列方法异步出现Task is cancel
情况 #I3SJF6 - [修复]
Mysql
数据库的ToPagedList
方法返回的结果进行遍历出现MySqlConnection is aleady use
问题 #I3SJQ3 - [修复]
tool/cli.psl
没有包含项目名称 #I3S1T6 - [修复] 远程请求做上传文件时,没有传入
Body
,程序直接跳过 #I3TKFH - [修复] 远程请求
multipart/form-data
内容分割符缺失 #I3TNO9 - [修复] 远程请求代理拦截方式返回
HttpResponseMessage
问题 #I3V161 - [修复]
repository.Database.SetCommandTimeout(600)
无法生效#I3VAQS
- [修复]
其他更改
文档变化
问答答疑
- [答疑] 默认
MasterDbContextLocator
不随自定义的参数生成 #I3SDBB - [答疑] 事件总线中订阅处理程序类获取不到用户信息,这个正常吗 #I3SS0U
- [答疑] 在有多租户过滤器的情况下,是否有一种方式查询全量的数据 #I3T0VI
- [答疑] mysql 使用
&"tools/cli.ps1"
页面化加载表结构失败 #I3T4F8 - [答疑] 其他 Web 层的 Startup 优先执行 #I3T8IP
- [答疑] 辅助角色服务实现建议 #I3T906
- [答疑] 开启
easy connection
后同一内网地址浏览器可以正常访问,远程请求则无法访问#I3TA2U - [答疑]
scope.ServiceProvider.GetService<IOtherService>
不存在 #I3TQMV - [答疑] 能否在 WPF 项目中使用呢? #I3TMCC
- [答疑]
Dapper
多个数据源 #I3TM9B - [答疑]
L.GetSelectCulture()
方法异常 #I3TQS4 - [答疑] 循环中使用
IDGen.NextID()
得到的结果并不是连续的 #I3UAF6 - [答疑] 模块化动态加载插件支持通配符匹配.dll #I3UDT8
- [答疑]
MVC
模式,在Controller
里快捷方式创建View
页面出错 #I3UFGB - [答疑] 数据库迁移没有种子数据 #I3UI7G
- [答疑]
SpareTimeAttribute
中 根据 Cron 表达式 自动匹配 Cron 表达式格式化方式 #I3UTKQ - [答疑] 使用
workService
集成SqlSugar
报错 #I3V8HJ - [答疑]
sqlserver 2008
分页报错如何解决呢 #I3VF96
- [答疑] 默认
不做实现
v2.5.0/2.6.0 (已发布)
新特性
突破性变化
问题修复
- [修复] 远程调用方法错误,请求报文头
Headers
不能添加到IHttpDispatchProxy
的子接口上 #I3RAF7
- [修复] 远程调用方法错误,请求报文头
其他更改
- [优化] 应用启动性能,减少内存分配
文档变化
问答答疑
- [答疑] 关于
Furion
集群部署 #I3R3J4 - [答疑] 升级最新框架以后, 数据库生成模型报错 #I3R7TP
- [答疑] 数据库上下文事务执行中,
SaveNow
执行后有警告 #I3RAJI - [答疑]
Hangfire
使用事务出现错误 #I3ROQ5 - [答疑] 如何实现 cli 不执行某些表的迁移,web 请求可以正常操作呢? #I3ROU5
- [答疑] 在使用定时任务时候出现的问题:继承
ISpareTimeWorker
#I3RRZS - [答疑]
MySql
时间差 8 小时处理 #I3RSCO - [答疑]
Db.GetRepository<>
方法结合[UnitOfWork]
后不可用 #I3RUK5 - [答疑] 事务开启失败问题 #I3RYJY
- [答疑] 支持
DbProvider
可动态配置 #I3RYPE - [答疑]
WorkService
依赖注入ISingleton
问题 #I3RZ1L - [答疑]
ISpareTimeWorker
运行期动态修改 #I3S33Q
- [答疑] 关于
不做实现
v2.4.0 (已发布)
新特性
突破性变化
- [升级] .NET 5 SDK 为 5.0.6 版本
- [新增]
IJsonSerializerProvider.GetSerializerOptions()
接口方法 #I3QIJN
问题修复
其他更改
- [优化]
Furion
框架底层性能,减少内存占用,提高应用初始化速度 92f8cc1
- [优化]
文档变化
- [更新] JSON 序列化文档、规范化结果文档、数据库上下文文档
问答答疑
- [答疑]
InsertOrUpdateNowAsync
报错 #I3QKO5
- [答疑]
不做实现
v2.3.0 (已发布)
新特性
突破性变化
- [支持] 支持 .NET 6.0.0 Preview 3 版本 #I3P2C7
问题修复
其他更改
文档变化
- [文档] 添加
JWTSettings
配置独立文档 #I3PQGW
- [文档] 添加
问答答疑
不做实现
- [废弃] CAS 支持#I3PIET
v2.2.0 (已发布)
新特性
突破性变化
问题修复
其他更改
文档变化
- [新增] 粘土对象文档 #I3OG18
问答答疑
不做实现
v2.1.0 (已发布)
新特性
突破性变化
问题修复
其他更改
- [改进] 支持应用启动的时候迁移种子数据 #I3NH3M
文档变化
问答答疑
不做实现
- [作废] 期待 IEnumerableExtensions 扩展 OrderBy 函数来支持分页排序 #I3NOQ9
v2.0.0 (已发布)
新特性
- [新增] 控制台应用程序及 Worker Services 支持 #I3K4DG
- [新增] 完整任务调度功能 #I3IRUX
- [新增]
Cron
表达式解析 #I3IQ9Y - [新增] 支持
Swagger
自定义配置swagger.json
地址模板 #I3IHMX - [新增] 支持配置动态 WebApi 区域 #I3IJAZ
- [新增] 远程请求新增支持传入服务提供器
IServiceProvider
#I3IVBL - [新增] 全局配置选型
SupportPackageNamePrefixs
配置,支持配置包前缀 #I3K0SN - [新增] 应用启动时支持
referenceassembly
类型程序集扫描 #I3K0SN - [新增] 依赖注入
AOP
拦截获取方法真实特性 #I3LZBX - [新增] EFCore 手动
SaveChanges()
特性 #I3N01Y - [新增] 支持
Cors
跨域更多配置 #I3N2J0
突破性变化
问题修复
- [修复] 关闭
InjectMiniProfiler
参数后内存缓存无效 #I3IHLR - [修复] 在多租户中调用
Tenant
属性出现偶然性数据库上下文被释放的情况 #I3IC70 - [修复] Sql 代理中如果返回基元类型抛出不能将 object 转换成对应类型的异常 #I3IC84
- [修复] 存储过程多返回值的时候,outputvalues 的 name 不是定义的 MSG 的 name,是 Msg 类型。 #I3IC7Y
- [修复] PhoneNumber 手机号验证正则表达式错误 #I3ID10
- [修复] 依赖注入 AOP 拦截无法捕获内部异常 #I3IGCC
- [修复] 全局拦截标记异常已被处理后异常过滤器依然执行 #I3J463
- [修复] 自定义全局异常拦截器不起作用 #I3K1SJ
- [修复] 在 WorkerService 模式下,还是使用 WebHostEnvironment 来判断 Host 环境,会导致错误 #I3LCQY
- [修复] 定时任务
DoOnce
抛空异常 bug #I3M0ZT
- [修复] 关闭
其他更改
文档变化
问答答疑
- [答疑] 数据校验,自定义 ErrorMessage 无效问题 #I3ICL3
- [答疑] 最新 issue 中新增的“新增常用的 JSON 序列化方法” 会导致 AOP 拦截异常 #I3I7VE
- [答疑] Furion.DatabaseAccessor.PrivateEntityBase 中的 TenantId 数据类型设置为 object #I3IQV6
- [答疑] 有关异常拦截和处理的疑问 #I3IUFZ
- [答疑]
DataValidation
在空值的情况下被忽略掉了#I3IWSM - [答疑] 日志文档没有更新 #I3J1DX
- [答疑] 对于 webapi 简单类型参数,是否可以以 json 方式提交 #I3J18I
- [答疑]
IUnifyResultProvider
实现中如果UnifyModel
的 type 不是范型会报错 #I3JBXF - [答疑] 如何模块化开发新功能? #I3J7ZZ
- [答疑] 建议增加微服务中间件的集成 #I3JTZQ
- [答疑] 二级虚拟目录部署的 swagger 的 MiniProfiler js 报错 #I3IWLR
不做实现
- [作废] 在请求审计日志中对贴有 DisableAuditing 特性的字段自动过滤 #I3DHAN
v1.19.0 (已发布)
新特性
突破性变化
- [升级] .NET 5 SDK 至 5.0.5 版本
问题修复
其他更改
文档变化
- [更新] 数据库上下文、多租户、仓储、日志、序列化等文档。
问答答疑
不做实现
v1.18.0 (已发布)
新特性
突破性变化
问题修复
其他更改
文档变化
- [更新] 数据库操作文档 #I3E84X
问答答疑
不做实现
v1.17.0 (已发布)
新特性
突破性变化
- [调整]
IRepository.AsAsyncEnumerable()
返回值 #I3DIQ1,调整为:rep.AsQueryable().ToListAsync()
- [调整]
问题修复
其他更改
文档变化
- [调整] 远程请求文档 #I3CPJO
问答答疑
- [答疑]
LinqExpression.And
没有 2 个参数的方法 #I3CXKZ - [答疑] 异常信息 如何记录到数据库中:) #I3DDGO
- [答疑] 无键实体选用
IEntityNotKey
#I3DWRF - [答疑] 根据主键删除一条记录不成功,无错误信息 #I3DWWF
- [答疑] 如何自定义接口返回格式 #I3DZN6
- [答疑] DynamicApiController 如何在运行时决定是否公开一个 Action #I3D5UL
- [答疑]
Furion.DatabaseAccessor.DbHelpers
方法:ConvertToDbParameters
是不是应该过滤掉贴NotMapped
的特性 #I3E2XS
- [答疑]
不做实现
- [废弃] 框架是否提供
ISoftDelete
类似接口 #I3CP93
- [废弃] 框架是否提供
v1.16.0 (已发布)
新特性
突破性变化
问题修复
- [修复]
MVC
模式下不支持验证自定义验证逻辑 #I39LM5 - [修复] 验证数值类型正则表达式不支持负数 bug #I39YUV
- [修复] 框架启动时无法加载未被引用的程序集 bug #I3A3Z4
- [修复]
EFCoreRepository.IsAttached()
方法判断错误 bug #I3A824 - [修复]
动态API
驼峰显示配置无效 bug #I3AF32 - [修复]
cli.ps1
不支持新版本EFCore
bug #I3APO9 - [修复]
EFCore
实体配置[Table]
特性无效 bug #I3BAYH - [修复] 动态 WebAPI
CheckIsSplitCamelCase
bug #I3BLKX - [修复] 修复动态 WebAPI 配置保留 Action 的 Async 后缀无效问题 #I3C3DA
- [修复]
JWT
Token 刷新后旧的刷新 Token 依旧可用 bug #I3C8ZH - [修复] 多语言
Razor
视图变量多语言乱码问题 #I3CBMU
- [修复]
其他更改
文档变化
问答答疑
- [答疑]
Furion.Extras.DatabaseAccessor.SqlSugar
配置多个数据库打印 SQL 语句问题 #I39PDC - [答疑]
ORACLE
数据库多租户模式下返回值为指定类型时系统卡死 #I39RNH - [答疑] 假删除指向异常 #I39XZA
- [答疑]
Furion
多语言配置节是放在AppSettings
里面还是外面呢? #I3A4SB - [答疑] 没找到数据库上下文 #I3A5HS
- [答疑] 有
QQ
交流群吗? #I3AAM7 - [答疑]
Vue3
环境下配置SignalR
跨域出错 #I3ALQ7 - [答疑] 设置
Swagger
参数非必填 #I3AT02 - [答疑] EFCore 调用 Insert 时报
Unknown column 'Discriminator' in 'field list'
异常 #I3B2LC - [答疑] 逆向
mysql
数据库时cli
出现错误 #I3B64F - [答疑] Sql 高级代理使用过程中 DateTime 类型的参数序列化失败 #I3AZXK
- [答疑] 使用 Mysql 执行 Add-Migration 报错 #I3B8EW
- [答疑] Saas 多租户模式-独立 Database 模式下无法获取 Tenant, 导致无法自动切换的问题#I3AVXU
- [答疑] 如何自定义 WebAPI 统一结果模型 #I3BBYW #I3BBYV
- [答疑] 在
Web.Entry
项目新建了一个Controller
,多了未知方法 #I3BKH5 - [答疑]
AOP
拦截如何解析服务 #I3BUM3 - [答疑] 动态 WebAPI 返回参数被省略 #I3C2XR
- [答疑] 如何设置某一个接口响应数据不自动转小写,按原始字段名返回 #I38L9B
- [答疑] code first 如何配置自动迁移 #I3CCR0
- [答疑] webapi 混合授权如何区分不同系统 #I3CJCY
- [答疑] EFCore 不支持递归无限级遍历关系 #I3CET9
- [答疑]
不做实现
v1.15.0 (已发布)
新特性
突破性变化
问题修复
其他更改
- [优化] 代码不规范命名导致开发者阅读代码时产生歧义
文档变化
- [新增]
FluentValidation
集成文档 #I38IOT
- [新增]
问答答疑
- [答疑]
Furion
框架版本向下兼容问题 #I38WMZ
- [答疑]
不做实现
v1.14.0(已发布)
新特性
突破性变化
问题修复
其他更改
文档变化
问答答疑
不做实现
v1.13.0(已发布)
新特性
- [新增] 多语言功能及拓展 #I2DOCL
- [新增] 事件总线功能及消息中心 #I23BKN
- [新增]
Swagger
分组显示隐藏配置 #I2AHH8 - [新增]
Furion.Extras.Logging.Serilog
拓展插件 #I2AAN8 - [新增]
cli.ps
支持-Namespace
命名空间指定 #I2A175 - [新增]
Swagger
规范化化文档授权失效后自动取消授权锁 #I2AIWC - [新增]
Request.Body
支持重复读功能,主要解决微信 SDK 问题 #I2AMG0 - [新增] 网络请求功能及文档 #I2APGJ
- [新增]
SqlSugar
拓展包支持打印sql
到MiniProfiler
中 #I2ASLS - [新增]
Furion.Extras.DatabaseAccesssor.Dapper
拓展插件 #I2ASYA - [新增]
Furion.Extras.DatabaseAccessor.PetaPoco
拓展插件 #I2AUGA - [新增] 网络请求字符串拓展方法 #I2CPQ0
- [新增]
SqlSugar
拓展新增PagedList
拓展 #I2CW99 - [新增] 远程请求支持参数特性验证 #I2CX5L
- [新增]
App.User
获取当前授权用户信息便捷方法 #I2CZLO - [新增] 规范化文档可配置功能,支持
appsettings.json
配置 #I2D1K9 - [新增] 远程请求拦截器添加方法和方法参数 #I2D2CM
- [新增] 远程请求出错返回默认值支持 #I2D44M
- [新增] 远程请求
body
参数序列化支持设置PropertyNamingPolicy
#I2D685 - [新增] 远程服务接口客户端配置 #I2D7PS
- [新增]
AddInject
和UseInject
允许自定义SecurityDefinitions
和SwaggerUI
#I2DIMG - [新增]
[SecurityDefine]
默认构造函数 #I2DNXT - [新增]
AspectDispatchProxy
动态代理类 #I2DO6I - [新增]
[QueryParameters]
特性,支持一键将Action
参数添加[FromQuery]
特性 #I2G8TF - [新增] 动态日志配置及拓展方法 #I2GDGD
- [新增]
WebApi
请求谓词默认规则配置功能 #I2M70X
突破性变化
- [升级]
.NET 5
SDK 到.NET 5.0.2
版本 #I2D0PZ - [调整] 框架内所有拓展类命名空间,全部迁移到
Furion.模块.Extensions
下 #I2AH54 - [调整]
Swagger
记住授权存储方式,替换Session
存储方式为LocalStorage
方式 #I2AKUA - [调整]
Furion
框架包描述文件,减少框架体积 #I2APAU - [调整]
App.CanBeScanTypes
为App.EffectiveTypes
#I2B0ZR - [调整]
App.ServiceProvider
属性并移除App.GetDuplicateXXX
方法 #I2CYZE - [调整]
Db.GetDuplicateDbContext
为Db.GetNewDbContext
#I2CZ04 - [调整]
Db.GetSqlDispatchProxy
为Db.GetSqlProxy
#I2DO9T - [重构]
Aop
服务拦截器,支持异步、同步两种方式 #I2B9HQ - [重构] 网络请求所有功能 #I2BMR7
- [升级]
问题修复
- [修复]
Swagger
规范化化结果不一致 bug #I2ACF3 - [修复] 数据库新增或更新忽略空值操作方法报空异常 #I2AB6C
- [修复]
Startup.cs
Aop 全局拦截无效 #I2A7T2 - [修复]
Token
过期后自动刷新Token
无法获取最新的用户信息 bug #I2AWQI - [修复]
[ApiDescriptionSettings(Tag="xx")]
导致swagger.json
报错 bug #I2B47R - [修复]
Mysql
sql 数据库查询结果tinyint
类型转换出错 bug #I2BEBM - [修复] 规范化结果多次包裹类型 bug #I2BHHZ
- [修复] 动态 Api 基元类型数组问题 #I2BMS5
- [修复]
sql
查询枚举类型转换异常 bug #I2BS2Y - [修复]
string.SqlQuerizeAsync<T1>()
拓展返回错误 bug #I2BSTS - [修复] 动态 Api 子类重写父类方法并取别名后
Swagger
异常 bug #I2C9VP - [修复] 网络请求
application/json
序列化大小写问题 #I2CRJC - [修复] 多数据库定位器实体嵌套关联 bug #I2CVN0
- [修复] 跨域响应头设置无效 bug #I2CW5T
- [修复] 远程网络请求代理打印到
MiniProfiler
bug #I2CZBC - [修复] 远程请求响应拦截器 bug #I2D4DG
- [修复]
SqlSugar
框架AsQueryable()
一直追加参数 #I2DH1D - [修复] 自动刷新
Token
空异常 bug #I2DO29 - [修复] 生成
JWT Token
不传过期时间出现验证 401 bug #I2DO8L - [修复]
AppStartup
排序无效 #I2DVD2 - [修复] 未启用多语言服务时友好异常和验证出现空异常 #I2ECUJ
- [修复] 数据校验字母和数字组合无法匹配 bug #I2EF2Q
- [修复] 数据校验手机或固话无效 bug #I2M5IZ
- [修复]
Dapper
拓展解析SqlConnection
异常 bug #I2M5P2 - [修复] 开启多语言后,
EF
迁移异常 bug #I2M7DT - [修复]
IEntityTypeBuilder
不支持多重继承 bug #I2PAOD - [修复]
JwtHandler
设置自动刷新后,匿名访问无法通过 bug #I2SDOX - [修复]
Dapper
拓展中SqlServer
数据库获取连接对象类型 bug #PR159
- [修复]
其他更改
文档变化
问答答疑
- [答疑] 跨域设置无效 #I2ASNJ
- [答疑]
MVC
视图无效,原因是.cshtml
文件没有设置为内容
#I2AXUU - [答疑]
Sql
操作可以实现事务吗?#I2B0NX - [答疑]
IRepository
操作数据库会打开多次数据库连接 #I2BB7B - [答疑] 如何进入自定义
AppAuthorizeHandler
断点 #I2BGXY - [答疑]
SqlSugar
注入问题 #I2C2AQ - [答疑] 建议增加 API 签名验证,时效验证 #I2C6ET
- [答疑] 多数据库多租户同时使用
Add-Migration
报错 #I2CEHS - [答疑]
ISqlSugarRepository
没有Getxxx
方法 #I2CJLZ - [答疑]
cli.ps1
如何将sql
里的表导出成model
类 #I2CSUL - [答疑] 手动修改
Swagger
终结点路径无效 #I2D608 - [答疑]
DefaultDbContext
不能识别 #I2DCZX - [答疑] 各分层项目
Startup.cs
支持Configuration
#I2DDUP - [答疑]
Aop
无法拦截,无效 #I2DEY8 - [答疑]
mysql
执行Add-Migration
报错 #I2DSB8\ - [答疑]
Entity
创建时间和是否删除添加默认值 #I2E04H - [答疑]
swagger
中多个servers
设置 #I2E0IF - [答疑] 全局筛选器 没有执行 #I2E5R4
- [答疑] 多数据库定位器疑问 #I2E77T
- [答疑]
cli.ps
逆向工程Mysql
数据库报错 #I2E7I5 - [答疑]
Swagger
开发环境applicationsettings.json
中文乱码 #I2EAG1 - [答疑] 增加指定路径程序集映射 #I2EEO2
- [答疑] 动态编译
cs
脚本文件 #I2EH66 - [答疑] 自定义中间件,返回的错误没有规范化结果 #I2NV8S
- [答疑]
Swagger
循环引用设置生成文档层级无效 #I2PLQQ - [答疑] 配置文件支持
yaml
文件吗? #I2TJ3N - [答疑] 修改数据库未
mysql
执行Add-Migration
报错 #I2VR64 - [答疑] 多数据库使用定位器时报错 #I2VR8F
- [答疑]
Migration To Oracle
异常 #I2WBYQ - [答疑] 开发时显示
Swagger
,上线时关闭Swagger
,这需要怎么配置 #I2WOYV - [答疑] 兼容 Mvc 复杂验证没有试验成功 #I2X3GV
- [答疑]
Aop
能不能支持无接口的类 #I2X8AS - [答疑] 关于
JWT Token
自动刷新问题 #I2YD4K - [答疑] 能否增加一个拓展的
Entity
,增加一些拓展的属性 #I2YDKT - [答疑]
Furion
无法还原包,使用Nuget
下载和通过最新的的脚手架下载都提示这个问题 #I30446 - [答疑] 复杂校验与特性验证不能并行 #I3046U
不做实现
- [废弃] 引入 Webhook 机制 #I2A3I0
- [废弃] 增加 blog 存储服务 #I2AMBP
- [废弃] Blazor Server 环境下 EF 的 DbContext 多线程问题 #I2AMD2
- [废弃] 希望实现工作单元操作接口(IUnitOfWork)#I2AOR5
- [废弃] 建议新增
string.ToPagedListAsync()
操作 #I2BZ3Z - [废弃] 建议新增
GraphQL
,OData
功能 #I2C9EH - [废弃] 迫切期望支持 CAP 分布式事务 #I2CBRF
- [废弃] 如何让某个方法或实体变化后,不被
SavingChangesEvent
等拦截 #I2CEM9 - [废弃] 建议日志封装增加更多拓展,比如:自定义保存日志文件 #I2CW8V
- [废弃] 对
SqlSugar
的支持,增加Nuget
脚手架 #I2D91U - [废弃] 使用
Middleware
实现反向代理 #I2DKM1 - [废弃] 支持配置多个
Aop
功能 #I2E6Z2 - [废弃] 是否计划开发类似网关的功能 #I2PD1L
- [废弃]
waring CS8002
: 引用程序集Furion
没有强名称 #I2WDN2 - [废弃] Oracle 数据库驱动集成
Devart.Data.Oracle.Entity.EFCore
#I2XJIU
v1.7.0(已发布)
新特性
- [新增]
Furion.Extras.ObjectMapper.Mapster
拓展包 #I29LSJ - [新增]
Furion.Extras.Logging.Serilog
拓展包 #I2AAN8 - [新增]
Furion.Extras.Web.HttpContext
拓展包 #I29LSM - [新增] 内置
Token
刷新机制支持 #I29K57 - [新增] 动态数据库上下文,支持运行时执行
OnModelCreating
#I28UDT - [新增] 支持依赖注入排除指定接口 #I29693
- [新增] 规范化结果返回时间戳字段 #I29697
- [新增] 基础
CURD
父类操作例子 #I296SR - [新增]
sql.Change("定位器完整类型名称")
支持 #I29LAB - [新增]
UpdateInclude
和UpdateExclude
忽略空参数支持 #I29VUG - [新增] 数据库上下文内置假删除查询过滤器支持 #I29Y2R
- [新增] 忽略空值排除默认时间格式 #I29VUV
- [升级]
MiniProfiler
组件 #I297R9
- [新增]
突破性变化
- [调整]
AppAuthorizeHandler
授权管道为异步处理 #I29MD9 - [调整]
Swagger
默认启用JWT
授权支持 #I29LI4 - [调整]
HttpContextUtilities
名称改为HttpContextLocal
#I29KQE - [调整]
UnifyResultContext
名称改为UnifyContext
#I29LLZ - [调整] 只有执行迁移命令才扫描种子数据 #I29E6P
- [调整] 规范化结果
Successed
属性名为Succeeded
#I29NMV - [移除]
Mapster
对象组件,采用提供拓展方式 #I29D2M - [移除]
CacheManager
拓展类 #I29LU1 - [重构]
SaveChanges
拦截器 #I292LO
- [调整]
问题修复
- [修复] 未注册的数据库上下文也被引用全局查询拦截器 bug #I29ZXJ
- [修复] 手动返回
BadObjectResult
或ValidationProblemDetails
结果类型时规范化结果失效 bug #I29ZU9 - [修复] 动态 WebApi
KeepName
,KeepVerb
、SplitCamelCase
无效 bug #I29X90 - [修复]
Sql代理
返回元组
类型出错 bug #I29SMV - [修复]
401,403
状态码规范化返回值属性变大写 bug #I29M8Y - [修复]
HttpContext
空异常 bug #I29LU4 - [修复] 接口无返回值没有应用规范化结果 bug #I29GT7
- [修复] 前端
Less
配置文件导致主机启动失败 bug #I29E7P - [修复] 执行
sql
结果转泛型后属性重复赋值 bug #I29BUO - [修复]
Swagger
关闭MiniProfiler
之后组中组
失效 #I29789 - [修复] 未启用规范化结果时异常返回
System.Object
字符 #I2969A - [修复] 正数数据验证 0 也验证通过 bug #I2955T
- [修复] 非泛型类集成泛型接口依赖注入 bug #I294YT
- [修复]
Swagger
不支持new
覆盖父类的 bug #I28Z1A - [修复]
JsonSerializerUtility
没有公开 bug #I28WMI - [修复]
SqlSugar
拓展查询泛型类型注册异常 bug #I28VMT - [修复]
Furion Tools
不支持生成不同命名空间的实体 bug #I2A175 - [修复] 全局拦截器无效 bug #I2A7T2
- [修复] 新增或更新忽略空值空异常 bug #I2AB6C
其他更改
- [优化]
Token
生成加密算法 #I29KIH
- [优化]
文档变化
- [新增] 日志文档 #I28Y9D
- [调整] 数据库上下文、实体拦截器、配置、一分钟入门等等文档
问答答疑
不做实现
v1.4.0(已发布)
新特性
- [新增]
Furion
支持二级虚拟目录部署功能 #I28B77 - [新增]
Furion.Template.RazorWithWebApi
脚手架 #I28QGI - [新增]
Furion.Template.BlazorWithWebApi
脚手架 #I27Z3O - [新增]
EFCore
时态查询拓展 #I28AJ - [新增]
[AppDbContext(连接字符串,数据库类型)]
配置支持 #I28QTB - [新增]
DateTimeOffset
转DateTime
拓展方法 #I27MQA - [新增]
ValidationTypes
验证正则表达式智能提示 #I2801V - [新增]
ValiationTypes.WordWithNumber
验证 #I2805 - [新增] 获取客户端和服务端 IP 地址 #I28QV9
- [新增]
突破性变化
问题修复
- [修复] 多数据库上下文配置定位器后实体无法正确生成 bug #I2888L
- [修复] 多租户数据库上下文实体生成 bug #I2891G
- [修复] 对象验证失败提示消息没有应用
JSON
大小写配置 bug #I27UTX - [修复] 仓储
Insert
或Update
方法指定ignoreNullValues
无效 bug #I27UN6 - [修复]
Controller
派生类如果贴了[Route]
特性后出现在Swagger
中 bug #I27TN7 - [修复]
SqlScalar
执行sql
返回Nullable
类型出现转换失败 bug #I27S2N - [修复]
[UnitOfWork]
特性异常 bug #I27MLM - [修复]
sql
静态执行方式和sql
高级代理无法监听数据库连接状态 bug #I27M4F - [修复] 修复更换 Json 序列化库无效 bug,如替换为
Microsoft.AspNetCore.Mvc.NewtonsoftJson
#I27M43 - [修复]
Furion Tools
工具生成模型 bug #I27XI5 - [修复] 软删除没有生效 bug #I2804I
- [修复]
Furion Tools
识别带多个\\
的连接字符串识别 bug #I280TS,#PR91 - [修复]
Furion Tools
无法取消生成 bug #I2816M - [修复]
DateTimeOffset
转本地时间差 8 小时 bug #I28BA9 - [修复] 启用
bundle js&css
压缩后启动异常 bug #I28KR - [修复]
ValidationTypes.Required
无效 bug #PR98 - [修复] 规范化结果
OnValidateFailed
参数名拼写错误 bug #PR93,#PR92 - [修复] 授权管道验证失败还显示结果 bug #PR89
其他更改
文档变化
问答答疑
- [建议] 希望
api
返回的值自动将 null 转为 '' 或 [][#I286IJ](https://gitee.com/dotnetchina/Furion/issues/I286IJ),【已关闭】 - [建议] 添加网关功能 #I27TP7,【已关闭】
- [建议] 新增
SqlQuery<T>
获取单条记录方法 #I28M1V,【已关闭】 - [建议] 希望可以提供集成
Serilog
例子 #I282J4,【已关闭】 - [疑问] 如何通过特性配置唯一约束 #I2891L,【已关闭】
- [疑问] 怎么读取
appsettings.json
数组 #I27WU,【已关闭】 - [疑问]
IRepository<TEntity>
出现空异常 #I281IE,【已关闭】 - [疑问] 规范化接口问题问题 #I28NMZ,【已关闭】
- [疑问] 统一返回值模型中 OnResponseStatusCodes 未执行 #I28NNL,【已关闭】
- [建议] 希望
v1.2.0(已发布)
新特性
- [新增] 雪花算法 #I26OXG, #PR78
- [新增]
[AppDbContext]
配置数据库提供器支持 #I27G3T - [新增] 实体表数据更改监听接口
IEntityDataChangedListener
#I278DD, #I278LQ - [新增] 全局服务接口 AOP 拦截功能 #I278CP
- [新增] 定位器仓储
IDbRepository<TDbContextLocator>
#I276Q3 - [新增] 数据库操作
InsertOrUpdate
支持排除空字符串功能 #I272OG - [新增] 数据库操作
UpdateInclude
和UpdateExclude
匿名对象支持 #I271X0 - [新增] 数据验证传入空对象跳过验证支持 #I273R4
- [新增] 应用启动时支持排除特定配置文件自动加载 #I26U0A
- [新增] 单个实体表名前缀支持 #I26LX0
- [新增]
MySql
数据库自动配置默认版本号 #I26XQ6 - [优化] 授权处理程序代码
突破性变化
问题修复
- [修复] 视图引擎加载外部程序集出错 bug
- [修复] 依赖注入代理接口报空对象异常 bug
- [修复]
EFCore
取消附加实体出错 bug - [修复] 数据库仓储在非 Web 请求下出现空异常 bug
- [修复] 多个授权策略共存问题出现无效 bug
- [修复] 友好异常
Oop.Oh
不支持普通方法 bug - [修复] 获取多租户对象时数据库上下文出现作用域验证失败 bug
- [修复] 工作单元不支持
Sql代理
拦截 bug #I27GST
其他更改
- [关闭][#I26O1F](https://gitee.com/dotnetchina/Furion/issues/I26O1F), #I27B2I, #I27BJ6, #I27E5Z, #I27EL4
文档变化
- [新增][实体数据监听器](https://dotnetchina.gitee.io/furion/docs/dbcontext-entitytrigger) 文档
- [更新] 一分钟入门、应用启动、官方脚手架、数据库操作指南、对象映射、规范化文档、异常处理、鉴权授权文档
v1.1.0(已发布)
新特性
- [新增]
Db.GetDbContext()
获取默认数据库上下文方法 - [新增]
HttpContextUtility.GetCurrentHttpContext()
获取全局HttpContext
上下文 - [新增]
App.GetRequiredService<>
解析服务方法 - [新增]
object.GetService<>
对象拓展方法 - [新增] 策略授权
PolicyPipeline
基类方法,支持多重判断授权 - [新增]
JWTEncryption.ValidateJwtBearerToken
手动验证静态方法 - [新增] 全局数据库上下文
InsertOrUpdateIgnoreNullValues
和EnabledEntityStateTracked
全局配置 - [新增]
Swagger Jwt授权
全局授权参数 #I26GLR - [新增]
InsertOrUpdate
支持自定义判断条件功能 #I269Q1 - [新增] 字符串字段小写命名支持 #I2695D
- [新增] 字符串文本对比功能 #I268LE
- [新增] 全局异常特性消息功能 #I2662O
- [新增]
Insert
或Update
数据库忽略空值功能 #I264Q4
- [新增]
突破性变化
- [调整]
Fur
项目名为Furion
- [调整]
Db.GetRequestDbContext<>()
命名为Db.GetDbContext<>()
- [调整]
Db.GetDbContext<>()
命名为Db.GetDuplicateDbContext<>()
- [重构]
App.GetService<>
解析服务的底层逻辑,大大提高了解析服务的性能 - [重构] 授权核心代码,保持和微软一致的授权规范 #I26DCB
- [移除]
App.GetRequestService<>
方法 - [移除]
ValidateJwtBearer
Jwt 授权方法,无需手动判断了
- [调整]
问题修复
- [修复] Furion 官方脚手架生成后编译异常 bug
- [修复]
Tenant
内置属性不是virtual
修饰 bug - [修复]
dockerfile
新命名构建失败 bug - [修复] 自定义角色授权和多个授权共存出现 403 bug #I26H1L
- [修复]
httpContext.GetEndpoint()
空异常 bug #PR73 - [修复]
Oops.Oh
空异常和不支持服务服务抛异常 bug #I26EFU,#I26GM4 - [修复]
cli.ps
生成文件编码乱码 bug #I26DVT - [修复]
Swagger
文件上传按钮不显示 #I26B6U - [修复] 规范化结果授权状态码序列化大小写不一致问题 #I26B26
- [修复] 未启用规范化结果时中文乱码 bug #I268T5
- [修复]
MySql
异步异常捕获不到 bug #I265SO - [修复]
cli.ps1
提示找不到数据库连接字符串 bug #I2647U
其他更改
文档变化
- [更新] 一分钟入门、安全鉴权、数据库等文档
v1.0.3(已发布)
新特性
- [新增] Mvc 模板脚手架:
Fur.Template.Mvc
- [新增] WebApi 模板:
Fur.Template.Api
- [新增] Mvc/WebApi 模板:
Fur.Template.App
- [新增] Razar Pages 模板:
Fur.Template.Razor
- [新增] Blazor 模板:
Fur.Template.Blazor
- [新增] Mvc 模板脚手架:
突破性变化
- [调整]
PagedList
到System.Collections.Generic
命名空间下 - [优化] 解析服务性能问题,底层代码大量优化
- [调整]
问题修复
其他更改
- 无
文档变化
- [更新] 入门文档、数据库上下文文档、多数据库操作文档
v1.0.2(已发布)
新特性
突破性变化
- [更新]
Mapster
包至7.0.0
版 - [调整]
App.Services
名为App.ServiceProvider
- [移除]
App.ApplicationServices
和App.GetRequestService<>()
- [移除] 非 Web 主机注入拓展
- [更新]
问题修复
其他更改
- [调整]
EntityBase
和Entity
所有属性为vitural
修饰 - [优化]
Jwt
读取和解析性能 - [优化] 优化代码支持 C# 9.0 最新语法
- [优化]
MD5
加密性能 #PR71 - [移除] 无用或未使用代码
- [调整]
文档
- [更新] 数据库上下文、多数据库、一分钟入门文档
v1.0.0(已发布)
新特性
- [新增] 网络请求
RemoteRequest
组件 #I1YYWD - [新增]
.AddInjectBase()
注入,只包含基础服务注入 - [新增] 所有服务都支持
IServiceCollection
和IMvcBuilder
注入 - [新增] 抛异常状态码设置功能
StatusCode
- [新增]
Swagger
序列化支持Pascal
属性命名方式
- [新增] 网络请求
突破性变化
- [更新] 所有的包为
.NET 5
正式版
- [更新] 所有的包为
问题修复
- [修复]
SqlProxy
代理异步处理 bug - [修复] 数据库类型
Datetime
转DateTimeOffset
bug - [修复] 属性首字母大小写序列化不匹配出现
null
bug - [修复] 对象序列化中文出现乱码 bug
- [修复] 默认序列化配置无效 bug
- [修复] 数据库非依赖注入方式提交无效 bug
- [修复] 应用程序池提交所有
DbContext
空异常 bug - [修复]
Saas
多租户Tenant
类型字符串属性在MySql
数据库下出现longtext
类型 bug - [修复]
Mvc
自动验证字符串空值 bug #I24M2T - [修复] 枚举注释被覆盖 bug #I24N6J
- [修复] 忽略规范化结果无效 bug #I24B8P
- [修复]
Swagger
默认ContentType
不是applicaiton/json
bug #I24F3U - [修复] 内置
System.Text.Json
和Newtonsoft.Json
冲突 bug #I24F3U
- [修复]
其他更改
- [调整]
Fur
框架域名为:https://furion.icu - [调整] 仓储
FromSqlRaw
和FromSqlInterpolated
接口位置 - [优化] 数据加解密性能,#PR70
- [调整]
文档
- [更新] README.md、框架介绍、数据库上下文、配置选项、多租户、跨域文档