同步操作将从 dotNET China/Furion 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
新特性
突破性变化
问题修复
其他更改
文档
新特性
突破性变化
.NET6
依赖包全部升级至 Nuget
最新版 v6.0.3
问题修复
其他更改
Furion.Extras.Logging.Serilog
拓展包 IWebHost
拓展为过时状态文档
本期亮点
WebApi
支持小驼峰路径,如 GetMyName
-> getMyName
:{
"DynamicApiControllerSettings": {
"LowercaseRoute": false,
"KeepName": true,
"AsLowerCamelCase": true
}
}
.NET6 WebApplication
模式二级虚拟目录配置:app.UseVirtualPath(app =>
{
app.UseInject(String.Empty); // 注意 String.Empty 只是例子,可以不填或填其他的,见一分钟入门
app.MapRouteControllers();
});
Furion v3.x 版本采用 .NET6 构建。
新特性
GET
请求自动转换 类类型
类型对象 #I4HR5Q
突破性变化
.NET6
版本问题修复
OnSucceeded
过滤器 bug #I4DTVL
.NET5.0.5+
和 .NET6
微软底层修改了 [ApiController]
验证失败返回 IActionResult
类型 #I4ISOK
EFCore 6.0
适配 SqlServer 2005+
出错 #I4ILA5
Sql
命令参数传入 Clay
类型异常问题 #I4D21Q
Cron
定时任务特性方式 bug #I4OJQI
其他更改
ToPagedList
泛型约束 d0244d
文档
特别鸣谢
新特性
GET
请求自动转换 类类型
类型对象 #I4HR5Q
突破性变化
EventBus
模块,采用 Jaina 方式问题修复
OnSucceeded
过滤器 bug #I4DTVL
.NET5.0.5+
微软底层修改了 [ApiController]
验证失败返回 IActionResult
类型 #I4ISOK
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
配置 !438
InjectionAttribute
特性的 ExceptInterfaces
单词拼写错误问题 !436
Sql
命令参数传入 Clay
类型异常问题 #I4D21Q
其他更改
文档
新特性
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
Jwt
拓展包不正确的代码导致 IOptions 失效#I46LUP
Swagger
枚举 Schema
过滤器不输出值问题 #I46LON !404
Swagger
处理非 int
类型枚举转换 bug #I46QJ9
dll
后再次加载出现 IL
格式化错误问题 ff52d38
Channel
读取器无法释放 Handler
对象问题 10f4a90
Worker Services
下日志不输出问题 c482548
multipart/form-data
类型对接微信小程序上传文件 问题 d9bad03
Swagger
枚举值在 GET
请求中 Schema
显示不正确问题 fb72fd7
404
不走异常过滤器问题 !426
v2.19+
版本之后模块化开发加载外部程序集失效问题 !433
特别鸣谢
新特性
突破性变化
在过去,很多开发者总是喜欢在
Startup.cs
配置服务的ConfigureService
方法中解析服务,这样导致内存存在溢出风险,GC 无法回收。 正确的方式是尽可能的避免ConfigureService
中解析服务。如果需要在【启动时】获取配置选项
,请使用App.GetConfig<TOptions>(路径, true)
代替App.GetOptions<TOption>
。
问题修复
AppDbContextBuilder
之后写错实体类型 #I45E6M
TestServer
bug #I45JR3
Retry.Invoke
正常方法死循环 bug !392
Token
生成新 Token
存在数组/集合类型导致 Key
重复异常问题 aeea2b1
string
)不正确的处理 93cf63a
AppDbContext
默认租户属性受工作单元影响问题 e51557f
Scoped.Create
在 EFCore
进行 Add-Migration
时候报空异常问题,原因是在 PM
环境中不存在根服务0853e74
Jwt
拓展包不正确的代码导致 IOptions 失效#I46LUP
Swagger
枚举 Schema
过滤器不输出值问题 #I46LON !404
Swagger
处理非 int
类型枚举转换 bug #I46QJ9
文档
Sql
操作,数据库上下文
等等文档新特性
IPC(Inter-Process Communication,进程间通信)
模块功能,目前提供进程内通信和共享内存进程外通讯 ProcessChannel
application/xml
和 text/xml
默认支持 4753a1a
.json
配置文件扫描目录 3e2910a
[IfException]
支持 4a4fe1f
突破性变化
问题修复
其他更改
Of
改为 _
81946b6
新特性
突破性变化
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
性能,减少不必要的监听新特性
问题修复
其他更改
新特性
突破性变化
问题修复
其他更改
该版本有多个破坏性更改,更新时请认真查看。
新特性
App.Configuration.Reload()
拓展 #I3XYI8
ISubscribeHandler
支持异步方法定义 #I3XYHJ
app.UseUnifyResultStatusCodes()
可配置修改返回状态码 #I3VZQH
User-Agent
头 #I3W17C
Sql
高级代理切换数据库上下文定位器 #I3XFP6 #I3XDCR
CronFormat
自动识别 #I3Y7GT
Sql 高级代理
拦截功能 #I3YHG4
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
问题修复
AppDbContext
设置 TablePrefix
无效: #I3Y57Q
消息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
其他更改
文档变化
问答答疑
dapper
多个数据源如何继承 #I3WUOI
SpareTime
多次执行问题#I3XEQU
SaaS
多租户添加时无法获取租户Id
#I3Y5CF
_httpContextAccessor.HttpContext
为空#I3Y6BI
Ubuntu
中使用 App.Configuration
方法读取不到值 #I3Y74H
UnitofWork
提交事务,可以提交成功,但是系统会有错误 #I3YIWU
不做实现
SpareTIme
新增 Dashboard
控制台看板,同时可以对任务进行暂停、删除、查看#I3XELY
新特性
突破性变化
问题修复
其他更改
文档变化
App
静态类文档、远程请求文档、分表分库文档问答答疑
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
不做实现
新特性
throw Oops.On("异常消息")
应用多语言支持 #I3UYC2
Db.GetMSRepository()
获取主从库仓储静态方法 #I3UBSJ
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
&"tools/cli.ps1"
页面化加载表结构失败 #I3T4F8
easy connection
后同一内网地址浏览器可以正常访问,远程请求则无法访问#I3TA2U
scope.ServiceProvider.GetService<IOtherService>
不存在 #I3TQMV
Dapper
多个数据源 #I3TM9B
L.GetSelectCulture()
方法异常 #I3TQS4
IDGen.NextID()
得到的结果并不是连续的 #I3UAF6
MVC
模式,在 Controller
里快捷方式创建 View
页面出错 #I3UFGB
SpareTimeAttribute
中 根据 Cron 表达式 自动匹配 Cron 表达式格式化方式 #I3UTKQ
workService
集成 SqlSugar
报错 #I3V8HJ
sqlserver 2008
分页报错如何解决呢 #I3VF96
不做实现
新特性
突破性变化
问题修复
Headers
不能添加到 IHttpDispatchProxy
的子接口上 #I3RAF7
其他更改
文档变化
问答答疑
Furion
集群部署 #I3R3J4
SaveNow
执行后有警告 #I3RAJI
Hangfire
使用事务出现错误 #I3ROQ5
ISpareTimeWorker
#I3RRZS
MySql
时间差 8 小时处理 #I3RSCO
Db.GetRepository<>
方法结合 [UnitOfWork]
后不可用 #I3RUK5
DbProvider
可动态配置 #I3RYPE
WorkService
依赖注入 ISingleton
问题 #I3RZ1L
ISpareTimeWorker
运行期动态修改 #I3S33Q
不做实现
新特性
突破性变化
IJsonSerializerProvider.GetSerializerOptions()
接口方法 #I3QIJN
问题修复
其他更改
Furion
框架底层性能,减少内存占用,提高应用初始化速度 92f8cc1
文档变化
问答答疑
InsertOrUpdateNowAsync
报错 #I3QKO5
不做实现
新特性
突破性变化
问题修复
其他更改
文档变化
JWTSettings
配置独立文档 #I3PQGW
问答答疑
不做实现
新特性
突破性变化
问题修复
其他更改
文档变化
问答答疑
不做实现
新特性
突破性变化
问题修复
其他更改
文档变化
问答答疑
不做实现
新特性
Cron
表达式解析 #I3IQ9Y
Swagger
自定义配置 swagger.json
地址模板 #I3IHMX
IServiceProvider
#I3IVBL
SupportPackageNamePrefixs
配置,支持配置包前缀 #I3K0SN
referenceassembly
类型程序集扫描 #I3K0SN
AOP
拦截获取方法真实特性 #I3LZBX
SaveChanges()
特性 #I3N01Y
Cors
跨域更多配置 #I3N2J0
突破性变化
EFCoreRepository
仓储 #I3J6W5
SqlRepository
所有逻辑代码 #I3J6V6
HttpContext.IsAjaxRequest()
拓展 #I3IVAA
ValidationTypes.Required
验证 #I3KR85
问题修复
InjectMiniProfiler
参数后内存缓存无效 #I3IHLR
Tenant
属性出现偶然性数据库上下文被释放的情况 #I3IC70
DoOnce
抛空异常 bug #I3M0ZT
其他更改
文档变化
问答答疑
DataValidation
在空值的情况下被忽略掉了#I3IWSM
IUnifyResultProvider
实现中如果 UnifyModel
的 type 不是范型会报错 #I3JBXF
不做实现
新特性
突破性变化
问题修复
其他更改
文档变化
问答答疑
不做实现
新特性
突破性变化
问题修复
其他更改
文档变化
问答答疑
不做实现
新特性
突破性变化
IRepository.AsAsyncEnumerable()
返回值 #I3DIQ1,调整为:rep.AsQueryable().ToListAsync()
问题修复
其他更改
文档变化
问答答疑
LinqExpression.And
没有 2 个参数的方法 #I3CXKZ
IEntityNotKey
#I3DWRF
Furion.DatabaseAccessor.DbHelpers
方法:ConvertToDbParameters
是不是应该过滤掉贴 NotMapped
的特性 #I3E2XS
不做实现
ISoftDelete
类似接口 #I3CP93
新特性
突破性变化
问题修复
MVC
模式下不支持验证自定义验证逻辑 #I39LM5
EFCoreRepository.IsAttached()
方法判断错误 bug #I3A824
动态API
驼峰显示配置无效 bug #I3AF32
cli.ps1
不支持新版本 EFCore
bug #I3APO9
EFCore
实体配置 [Table]
特性无效 bug #I3BAYH
CheckIsSplitCamelCase
bug #I3BLKX
JWT
Token 刷新后旧的刷新 Token 依旧可用 bug #I3C8ZH
Razor
视图变量多语言乱码问题 #I3CBMU
其他更改
文档变化
问答答疑
Furion.Extras.DatabaseAccessor.SqlSugar
配置多个数据库打印 SQL 语句问题 #I39PDC
ORACLE
数据库多租户模式下返回值为指定类型时系统卡死 #I39RNH
Furion
多语言配置节是放在 AppSettings
里面还是外面呢? #I3A4SB
QQ
交流群吗? #I3AAM7
Vue3
环境下配置 SignalR
跨域出错 #I3ALQ7
Swagger
参数非必填 #I3AT02
Unknown column 'Discriminator' in 'field list'
异常 #I3B2LC
mysql
数据库时 cli
出现错误 #I3B64F
Web.Entry
项目新建了一个 Controller
,多了未知方法 #I3BKH5
AOP
拦截如何解析服务 #I3BUM3
不做实现
新特性
突破性变化
问题修复
其他更改
文档变化
FluentValidation
集成文档 #I38IOT
问答答疑
Furion
框架版本向下兼容问题 #I38WMZ
不做实现
新特性
突破性变化
问题修复
其他更改
文档变化
问答答疑
不做实现
新特性
Swagger
分组显示隐藏配置 #I2AHH8
Furion.Extras.Logging.Serilog
拓展插件 #I2AAN8
cli.ps
支持 -Namespace
命名空间指定 #I2A175
Swagger
规范化化文档授权失效后自动取消授权锁 #I2AIWC
Request.Body
支持重复读功能,主要解决微信 SDK 问题 #I2AMG0
SqlSugar
拓展包支持打印 sql
到 MiniProfiler
中 #I2ASLS
Furion.Extras.DatabaseAccesssor.Dapper
拓展插件 #I2ASYA
Furion.Extras.DatabaseAccessor.PetaPoco
拓展插件 #I2AUGA
SqlSugar
拓展新增 PagedList
拓展 #I2CW99
App.User
获取当前授权用户信息便捷方法 #I2CZLO
appsettings.json
配置 #I2D1K9
body
参数序列化支持设置 PropertyNamingPolicy
#I2D685
AddInject
和 UseInject
允许自定义 SecurityDefinitions
和 SwaggerUI
#I2DIMG
[SecurityDefine]
默认构造函数 #I2DNXT
AspectDispatchProxy
动态代理类 #I2DO6I
[QueryParameters]
特性,支持一键将 Action
参数添加 [FromQuery]
特性 #I2G8TF
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
问题修复
Swagger
规范化化结果不一致 bug #I2ACF3
Startup.cs
Aop 全局拦截无效 #I2A7T2
Token
过期后自动刷新 Token
无法获取最新的用户信息 bug #I2AWQI
[ApiDescriptionSettings(Tag="xx")]
导致 swagger.json
报错 bug #I2B47R
Mysql
sql 数据库查询结果 tinyint
类型转换出错 bug #I2BEBM
sql
查询枚举类型转换异常 bug #I2BS2Y
string.SqlQuerizeAsync<T1>()
拓展返回错误 bug #I2BSTS
Swagger
异常 bug #I2C9VP
application/json
序列化大小写问题 #I2CRJC
MiniProfiler
bug #I2CZBC
SqlSugar
框架 AsQueryable()
一直追加参数 #I2DH1D
Token
空异常 bug #I2DO29
JWT Token
不传过期时间出现验证 401 bug #I2DO8L
AppStartup
排序无效 #I2DVD2
Dapper
拓展解析 SqlConnection
异常 bug #I2M5P2
EF
迁移异常 bug #I2M7DT
IEntityTypeBuilder
不支持多重继承 bug #I2PAOD
JwtHandler
设置自动刷新后,匿名访问无法通过 bug #I2SDOX
Dapper
拓展中 SqlServer
数据库获取连接对象类型 bug #PR159
其他更改
文档变化
问答答疑
MVC
视图无效,原因是 .cshtml
文件没有设置为 内容
#I2AXUU
Sql
操作可以实现事务吗?#I2B0NX
IRepository
操作数据库会打开多次数据库连接 #I2BB7B
AppAuthorizeHandler
断点 #I2BGXY
SqlSugar
注入问题 #I2C2AQ
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
cli.ps
逆向工程 Mysql
数据库报错 #I2E7I5
Swagger
开发环境 applicationsettings.json
中文乱码 #I2EAG1
cs
脚本文件 #I2EH66
Swagger
循环引用设置生成文档层级无效 #I2PLQQ
yaml
文件吗? #I2TJ3N
mysql
执行 Add-Migration
报错 #I2VR64
Migration To Oracle
异常 #I2WBYQ
Swagger
,上线时关闭 Swagger
,这需要怎么配置 #I2WOYV
Aop
能不能支持无接口的类 #I2X8AS
JWT Token
自动刷新问题 #I2YD4K
Entity
,增加一些拓展的属性 #I2YDKT
Furion
无法还原包,使用Nuget
下载和通过最新的的脚手架下载都提示这个问题 #I30446
不做实现
string.ToPagedListAsync()
操作 #I2BZ3Z
GraphQL
,OData
功能 #I2C9EH
SavingChangesEvent
等拦截 #I2CEM9
SqlSugar
的支持,增加 Nuget
脚手架 #I2D91U
Middleware
实现反向代理 #I2DKM1
Aop
功能 #I2E6Z2
waring CS8002
: 引用程序集 Furion
没有强名称 #I2WDN2
Devart.Data.Oracle.Entity.EFCore
#I2XJIU
新特性
Furion.Extras.ObjectMapper.Mapster
拓展包 #I29LSJ
Furion.Extras.Logging.Serilog
拓展包 #I2AAN8
Furion.Extras.Web.HttpContext
拓展包 #I29LSM
Token
刷新机制支持 #I29K57
OnModelCreating
#I28UDT
CURD
父类操作例子 #I296SR
sql.Change("定位器完整类型名称")
支持 #I29LAB
UpdateInclude
和 UpdateExclude
忽略空参数支持 #I29VUG
MiniProfiler
组件 #I297R9
突破性变化
AppAuthorizeHandler
授权管道为异步处理 #I29MD9
Swagger
默认启用 JWT
授权支持 #I29LI4
HttpContextUtilities
名称改为 HttpContextLocal
#I29KQE
UnifyResultContext
名称改为 UnifyContext
#I29LLZ
Successed
属性名为 Succeeded
#I29NMV
Mapster
对象组件,采用提供拓展方式 #I29D2M
CacheManager
拓展类 #I29LU1
SaveChanges
拦截器 #I292LO
问题修复
BadObjectResult
或 ValidationProblemDetails
结果类型时规范化结果失效 bug #I29ZU9
KeepName
,KeepVerb
、SplitCamelCase
无效 bug #I29X90
Sql代理
返回 元组
类型出错 bug #I29SMV
401,403
状态码规范化返回值属性变大写 bug #I29M8Y
HttpContext
空异常 bug #I29LU4
Less
配置文件导致主机启动失败 bug #I29E7P
sql
结果转泛型后属性重复赋值 bug #I29BUO
Swagger
关闭 MiniProfiler
之后 组中组
失效 #I29789
System.Object
字符 #I2969A
Swagger
不支持 new
覆盖父类的 bug #I28Z1A
JsonSerializerUtility
没有公开 bug #I28WMI
SqlSugar
拓展查询泛型类型注册异常 bug #I28VMT
Furion Tools
不支持生成不同命名空间的实体 bug #I2A175
其他更改
Token
生成加密算法 #I29KIH
文档变化
问答答疑
不做实现
新特性
Furion
支持二级虚拟目录部署功能 #I28B77
Furion.Template.RazorWithWebApi
脚手架 #I28QGI
Furion.Template.BlazorWithWebApi
脚手架 #I27Z3O
EFCore
时态查询拓展 #I28AJ
[AppDbContext(连接字符串,数据库类型)]
配置支持 #I28QTB
DateTimeOffset
转 DateTime
拓展方法 #I27MQA
ValidationTypes
验证正则表达式智能提示 #I2801V
ValiationTypes.WordWithNumber
验证 #I2805
突破性变化
问题修复
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
Microsoft.AspNetCore.Mvc.NewtonsoftJson
#I27M43
Furion Tools
工具生成模型 bug #I27XI5
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
其他更改
文档变化
问答答疑
api
返回的值自动将 null 转为 '' 或 [] #I286IJ,【已关闭】SqlQuery<T>
获取单条记录方法 #I28M1V,【已关闭】Serilog
例子 #I282J4,【已关闭】appsettings.json
数组 #I27WU,【已关闭】IRepository<TEntity>
出现空异常 #I281IE,【已关闭】新特性
[AppDbContext]
配置数据库提供器支持 #I27G3T
IEntityDataChangedListener
#I278DD, #I278LQ
IDbRepository<TDbContextLocator>
#I276Q3
InsertOrUpdate
支持排除空字符串功能 #I272OG
UpdateInclude
和 UpdateExclude
匿名对象支持 #I271X0
MySql
数据库自动配置默认版本号 #I26XQ6
突破性变化
问题修复
EFCore
取消附加实体出错 bugOop.Oh
不支持普通方法 bugSql代理
拦截 bug #I27GST
其他更改
文档变化
新特性
Db.GetDbContext()
获取默认数据库上下文方法HttpContextUtility.GetCurrentHttpContext()
获取全局 HttpContext
上下文App.GetRequiredService<>
解析服务方法object.GetService<>
对象拓展方法PolicyPipeline
基类方法,支持多重判断授权JWTEncryption.ValidateJwtBearerToken
手动验证静态方法InsertOrUpdateIgnoreNullValues
和 EnabledEntityStateTracked
全局配置Swagger Jwt授权
全局授权参数 #I26GLR
InsertOrUpdate
支持自定义判断条件功能 #I269Q1
Insert
或 Update
数据库忽略空值功能 #I264Q4
突破性变化
Fur
项目名为 Furion
Db.GetRequestDbContext<>()
命名为 Db.GetDbContext<>()
Db.GetDbContext<>()
命名为 Db.GetDuplicateDbContext<>()
App.GetService<>
解析服务的底层逻辑,大大提高了解析服务的性能App.GetRequestService<>
方法ValidateJwtBearer
Jwt 授权方法,无需手动判断了问题修复
Tenant
内置属性不是 virtual
修饰 bugdockerfile
新命名构建失败 bughttpContext.GetEndpoint()
空异常 bug #PR73
Oops.Oh
空异常和不支持服务服务抛异常 bug #I26EFU,#I26GM4
cli.ps
生成文件编码乱码 bug #I26DVT
Swagger
文件上传按钮不显示 #I26B6U
MySql
异步异常捕获不到 bug #I265SO
cli.ps1
提示找不到数据库连接字符串 bug #I2647U
其他更改
文档变化
新特性
Fur.Template.Mvc
Fur.Template.Api
Fur.Template.App
Fur.Template.Razor
Fur.Template.Blazor
突破性变化
PagedList
到 System.Collections.Generic
命名空间下问题修复
其他更改
文档变化
新特性
突破性变化
Mapster
包至 7.0.0
版App.Services
名为 App.ServiceProvider
App.ApplicationServices
和 App.GetRequestService<>()
问题修复
其他更改
EntityBase
和 Entity
所有属性为 vitural
修饰Jwt
读取和解析性能MD5
加密性能 #PR71
文档
新特性
RemoteRequest
组件 #I1YYWD
.AddInjectBase()
注入,只包含基础服务注入IServiceCollection
和 IMvcBuilder
注入StatusCode
Swagger
序列化支持 Pascal
属性命名方式突破性变化
.NET 5
正式版
问题修复
SqlProxy
代理异步处理 bugDatetime
转 DateTimeOffset
bugnull
bugDbContext
空异常 bugSaas
多租户 Tenant
类型字符串属性在 MySql
数据库下出现 longtext
类型 bugMvc
自动验证字符串空值 bug #I24M2T
Swagger
默认 ContentType
不是 applicaiton/json
bug #I24F3U
System.Text.Json
和 Newtonsoft.Json
冲突 bug #I24F3U
其他更改
Fur
框架域名为:https://furos.cn
FromSqlRaw
和 FromSqlInterpolated
接口位置文档
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。