v3 版本(归档) - 更新日志
升级前重点关注可能造成【破坏性】的标签类型:、、、
版本号规则:主版本号.次版本号.修订版本号.迭代版本号
- 只要【确认】为框架
bug,则当天修复,当天发版,修订版本号加 1。 - 只要
.NET SDK版本更新,则当天升级,当天发版,修订版本号加 1。 - 如果
.csproj文件有变更,则当天发版,修订版本号加 1。 - 如果新增
扩展包,为了版本号统一,则当天发版,修订版本号加 1。 - 如果涉及到代码重构,则当天发版,次版本号
加 1,修订版本号清 0。 - 如果
.NET SDK主版本号升级,则当天发版,主版本号加 1。
如有意外不能当天发版,则会在 Issue 中说明具体发版时间,正常不会超过 3 天。
v3.9.2(已发布,全新日志组件)
日志模块是任何应用系统都必备的功能,可以说是最重要的模块!在 .NET 社区中有 Log4NET,NLog,Serilog 等日志组件,它们无一不是优秀的开源项目。
但由于这些日志组件历史悠久,内部兼容的 .NET 版本非常多,功能随着时间推移变得极其强大复杂,在实际项目使用中,发现每一个日志组件配置总是不那么友好,特别是在使用上不够简单。
Furion 作为全栈开发框架,在过去版本并没有提供足以满足开发者需求的日志模块,转而推荐大家集成第三方组件,如 Serilog,导致后续无法实现自定义功能和也增加了不少维护成本。
这一次,Furion 不再妥协,彻底重构了日志模块,实现日志功能/需求完全自主可控,提供给开发者几乎所有日志功能的需求!
Furion 的使用者们,是时候“更换”掉第三方日志组件,让我们一起迭代出更强更好的日志组件吧! 🍖
- 新特性
- 突破性变化
- 问题修复
- 脱敏模块模型绑定个别情况下空异常问题 #I5IM5C
- 文档
- 日志文档、静态类文档、数据校验文档
- 本期亮点
- 极易使用且强大的日志模块
查看变化
// 写入文件
services.AddFileLogging("logs/application.log");
// 写入数据库
services.AddDatabaseLogging<DatabaseLoggingWriter>();
- 强大的
[LoggingMonitor]调试日志
查看变化
using Furion.Logging;
namespace Furion.Application;
public class TestLoggerServices : IDynamicApiController
{
[LoggingMonitor]
public PersonDto GetPerson(int id)
{
return new PersonDto
{
Id = id
};
}
}
支持控制器、操作或全局注册拦截。
输出日志为:
┏━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━
┣ Furion.Application.TestLoggerServices.GetPerson (Furion.Application)
┣
┣ 控制器名称: TestLoggerServices
┣ 操作名称: GetPerson
┣ 路由信息: [area]: ; [controller]: test-logger; [action]: person
┣ 请求地址: https://localhost:44316/api/test-logger/person/11
┣ 来源地址: https://localhost:44316/api/index.html
┣ 浏览器标识: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62
┣ 客户端 IP 地址: 0.0.0.1
┣ 服务端 IP 地址: 0.0.0.1
┣ 服务端运行环境: Development
┣ 执行耗时: 31ms
┣ ━━━━━━━━━━━━━━━ 授权信息 ━━━━━━━━━━━━━━━
┣ JWT Token: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY1ODcxNjc5NywibmJmIjoxNjU4NzE2Nzk3LCJleHAiOjE2NTg3MTc5OTcsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.VYZkwwqCwlUy3aJjuL-og62I0rkxNQ96kSjEm3VgXtg
┣
┣ UserId (integer): 1
┣ Account (string): admin
┣ iat (integer): 1658716797
┣ nbf (integer): 1658716797
┣ exp (integer): 1658717997
┣ iss (string): dotnetchina
┣ aud (string): powerby Furion
┣ ━━━━━━━━━━━━━━━ 参数列表 ━━━━━━━━━━━━━━━
┣ Content-Type:
┣
┣ id (Int32): 11
┣ ━━━━━━━━━━━━━━━ 返回信息 ━━━━━━━━━━━━━━━
┣ 类型: Furion.Application.Persons.PersonDto
┣ 返回值: {"Id":11,"Name":null,"Age":0,"Address":null,"PhoneNumber":null,"QQ":null,"CreatedTime":"0001-01-01T00:00:00+00:00","Childrens":null,"Posts":null}
┗━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━
v3.8.9(已发布)
- 新特性
- 规范化结果
ExceptionMetadata和ValidationMetadata都可以获取ErrorCode属性 #I5GJ6D -
ValidationMetadata类StatusCode属性 #I5HB5L - 远程请求对
Url是否编码设置,[Get(WithEncodeUrl = false)]和WithEncodeUrl(false)#I5GOBC - 更强大的
JWTEncryption.SecurityReadJwtToken('token')读取解析Token静态方法 574eeb6 -
ValiationTypes.Html验证Html标签 #I5HBKC - EFCore.NamingConventions 支持,可自定义生成表名,字段名风格,比如小驼峰,蛇形命名等 #I5HBEI
-
INamedServiceProvider命名服务提供器,可解析接口多实现 #I5HF98 - 脱敏处理模块方法参数单个值处理 a22ec3c
- 脱敏词库支持
|分割词语 3106b1d
- 规范化结果
- 突破性变化
- 问题修复
-
Rider开发工具对同名脚手架 (EFCore和SqlSugar) 只显示一个问题 !518 -
UnitOfWork工作单元在EFCore中失效问题 #I5H0T3 -
JWT中Token如果存在数组类型的值时,刷新Token后丢失了历史值 #I5GXML - 远程请求
WithEncodeUrl无法在[HttpMethod]设置问题 574eeb6 -
Serve.Run()模式下添加自定义配置导致EFCore无法获取自定义配置文件问题 #I5GZ0F -
Oops.Bah进入全局异常拦截器问题 #I5H47S -
AddDbPool/AddDb扩展未根据配置Key路径读取问题 #I5H6S4 !520 -
ValiationTypes.Url正则表达式覆盖不全问题 #I5HBKC -
v3.5.x版本导致集成 EFCore.NamingConventions 失效问题 #I5HBEI -
Swagger长路由不支持问题以及[Required]配置AllowEmptyStrings无效问题 c014330 - 远程请求上传文件时请求报文
boundary和Content-Disposition设置不正确问题 #I5HEF0 - 脱敏模块替换敏感词汇出现多替换问题 a22ec3c
-
- 其他更改
- 文档
- 远程请求文档,日志记录文档、多数据库文档、PM2 部署文档、Visual Studio 高效率文档
v3.7.11(已发布)
- 新特性
-
Minimal API应用支持:.AddInjectMini()#I4KOQ5 - 跨域
WithExposedHeaders默认配置access-token和x-access-token42ebdfd - 脚手架默认启用
app.UseHttpLogging()HTTP日志 42ebdfd -
Furion和ASP.NET Core完整json配置的JSON Schema架构 JSON Schema -
Sql代理支持返回单个类类型参数 1d7fb5b -
Sql代理支持返回ValueTuple单个类类型参数 876a2f5 - 组件化设计模块,支持比
AppStartup更灵活便捷的设计 #components - 独立工作单元模块,支持任何第三方
ORMa02413d - 跨域
FixedClientToken配置参数 bd01638 -
throw Oops.Bah可以手动触发规范化验证失败处理 83f0036 -
FriendlyExceptionSettings的ThrowBah配置,可标记Oops.Oh不进入异常处理 76ffa7f
-
- 突破性变化
-
Minimal API应用支持:.AddInjectMini()#I4KOQ5 -
Furion和ASP.NET Core完整json配置的JSON Schema架构 JSON Schema - 组件化设计模块,支持比
AppStartup更灵活便捷的设计 #components - 独立工作单元单元模块,支持任何第三方
ORMa02413d -
DataValidationFilter和FriendlyExceptionFilter,解决不支持手动抛出业务异常问题 83f0036 -
.AddDb<>和.AddDbPool<>自定义委托参数签名,由Action<DbContextOptionsBuilder>改为:Action<IServiceProvider, DbContextOptionsBuilder>
-
查看变化
// 由:
options.AddDbPool<TDbContext>(DbProvider.MySql, opt => {
});
// 改为
options.AddDbPool<TDbContext>(DbProvider.MySql, (services, opt)=> {
})
- 问题修复
- 自
v3.6.3版本依赖,执行原生Sql添加了参数校验导致存储过程执行错误问题 #I5ERMQ -
tools/cli.ps1脚本工具出现数据库链接被占用问题 -
JWTSettings算法配置JSON Schema错误问题,感谢 @gitwentao #I5G27B !516 - 基于策略授权在不配置
Policy的情况下出现空异常问题 #I5EVF2 - 启用数据库实体跟踪时导致新增实体多次查询数据库问题 #I4J2LZ
- 不启用规范化结果导致验证失效,异常失效问题 cdb3f57
- 验证异常和友好异常冲突问题 83f0036
-
CentOS 7.9系统部署无法指定命令--urls参数问题 8cc8ee
- 自
- 其他更改
- 脚手架所有
.json文件,默认添加JSON Schema支持
- 脚手架所有
- 文档
- 组件化启动文档
-
Vue/React/Angular请求代理文档 -
JSON Schema文档,支持配置智能提示和验证 - 跨域文档、规范化文档、配置文档、日志文档、IIS 部署文档
- 本期亮点
- 新增
JSON Schema支持,所有.json文件支持智能提示和验证
查看变化
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.EntityFrameworkCore": "Information"
}
},
"AllowedHosts": "*"
}

- 根据
Swagger生成Vue/React/Angular前端请求代码
Sql代理支持返回单个类类型参数
查看变化
public interface ISql : ISqlDispatchProxy
{
// 集合类型
[SqlExecute("select * from person")]
List<Person> GetPersons();
// 自 v3.7.3+ 版本支持返回单个类类型参数
[SqlExecute("select * from person where id=@id")]
Person GetPerson(int id);
}
Sql代理支持返回ValueTuple单个类类型参数
查看变化
public interface ISql : ISqlDispatchProxy
{
[SqlExecute(@"
select * from person where id =@id;
select * from person")]
(Person, List<Person>) GetData(int id); // 注意返回值是 `(Person, List<Person>)` 组合
}
- 支持
Minimal API应用
查看变化
var builder = WebApplication.CreateBuilder(args).Inject();
// 注册 Minimal 服务
builder.Services.AddInjectMini();
var app = builder.Build();
app.UseHttpsRedirection();
app.UseInject(string.Empty);
app.MapGet("/hello", () =>
{
return "Hello, Furion";
});
app.Run();
v3.6.9(已发布,全新入口组件)
相信从 ASP.NET 5 升级至 ASP.NET 6 的开发者都经历过微软多次变更初始化主机 Program.cs 和 Startup.cs 写法,甚至在 .NET6+ 之后移除了 Startup.cs 的设计。
试问,ASP.NET 7,ASP.NET 8... ASP.NET N 呢?会不会每一个版本都有不同的初始化方式,那后续项目如何无缝升级?
所以,为了保证一致的代码体验和后续无缝升级,推出了 Serve.Run(),即使未来创建方式变了,也不用担心,交给框架即可。
Serve.Run 模式也标记着 Furion 进入全新的极简入门时代。
- 新特性
-
Serve.Run()极简主机模式,真正实现极速入门。95cac5b -
TP.Wrapper(...)扩展方法,主要用来生成规范化的日志模板 427999a - 项目类型为
<Project Sdk="Microsoft.NET.Sdk">的控制台项目 fb08a65 -
BadPageResult错误页面类型 !494 -
[SchemaId]特性,解决不同程序集相同的类名生成Swagger的SchemaId冲突问题 #I5D3CU - 远程请求
options.ApproveAllCerts()忽略所有客户端证书扩展 eb7d18a - 判断是否是单文件环境部署静态属性
App.SingleFileEnvironmentde556f0 -
WebApplicationBuilder.UseSerilogDefault()扩展 e02524c
-
- 突破性变化
- 问题修复
- 默认注册的
services.AddResponseCaching();服务导致.axd内嵌资源请求错误问题 !495 -
Oracle数据库执行sql必须要求命令参数和sql语言参数数量一致 #I5D057 -
IHostService类型不能自动注册问题,之前只扫描了BackgroundService派生类 968344 - 国产芯片主机不能识别
dotnet run --urls参数问题 6d4398 - 远程请求上传文件不支持特定文件后缀问题,如
.pem文件 ba42198 - 一些程序集已破坏或程序集不完整导致主机无法启动问题 d2dc3e4
- 远程请求传入
headers时类型为Dictionary<string, string>导致转换异常问题 #I5DHL9 -
Serilog单文件发布不生成日志文件 I5DQ2B
- 默认注册的
- 其他更改
- 文档
-
Serve.Run()文档 -
HttpContext文档 -
GlobalUsings文档 -
TP全局静态类文档 - 中间件文档、筛选器文档、审计日志文档
- 跨域文档、远程请求文档
-
- 精彩贡献
- !494 优秀
Pull Request辩论典范
- !494 优秀
- 本期亮点
- 极速入门
查看变化
Serve.Run();
[DynamicApiController]
public class HelloService
{
public string Say()
{
return "Hello, Furion";
}
}
启动浏览器查看效果,惊呆了吗!

- 内置错误页
查看变化
using Furion.FriendlyException;
public IActionResult Add(Person person)
{
if(!ModelState.IsValid)
{
return new BadPageResult();
}
}

Swagger支持Markdown
查看变化
/// <summary>
/// 测试 Markdown
/// </summary>
/// <remarks>
/// # 测试 `Markdown` 注释
///
/// 
///
/// ```cs
/// Serve.Run();
///
/// [DynamicApiController
/// public class HelloService
/// {
/// public string Say()
/// {
/// return nameof(Furion);
/// }
/// }
/// ```
///
/// 功能还不错!!!
///
/// | 商品 | 价格 | # 其他 |
/// |--------------|-----------|------------|
/// | Juicy Apples | 1.99 | *7* |
/// | Bananas | **1.89** | 5234 |
/// | Bananas | **1.89** | 5234 |
/// | Bananas | **1.89** | 5234 |
///
/// -----
///
/// # Furion 探索版
///
/// > 在过去一年,实现 `Furion` 从无到有,编写文档已逾百万字,过程心酸开源人自知。
/// >
/// > 这一路日夜兼程,嘲讽批评常伴眼耳,即便辛苦无奈、想过放弃,但为了那微不足道的存在感依然努力着。
/// >
/// > 当然,也收获了不少...越来越多拥趸者,越发精湛技术能力,更高层次思维模式,还有许多跨界跨行朋友。
/// >
/// > 在 《[开源指北] (https://gitee.com/opensource-guide/comments/)》中,我曾说道:“开源如同人的脸,好坏一面便知,缺点可能会受到嘲讽批评,优点也会收获赞扬尊重。别担心,他们正在塑造更好的你。”
/// >
/// > 所以,这一次重新起航,重塑 `Furion` 重塑自己。也许未来在某个 IT 圈但凡有人谈起 `.NET` 还能瞟到 `Furion` 的身影。
///
/// ---
///
/// 🎉 探索 Furion 未来更多可能性,实现无第三方依赖的版本,所有模块功能按需安装,按需加载。
///
/// - 作者:[百小僧] (https://gitee.com/monksoul)
/// - 日期:2021 年 08 月 30 日
///
/// ## 环境
///
/// - IDE :[Microsoft Visual Studio Enterprise 2022 Preview(64 位) 版本 17.0.0 Preview 3.1] (https://visualstudio.microsoft.com/zh-hans/vs/preview/)
/// - SDK :[.NET SDK 6] (https://dotnet.microsoft.com/download/dotnet/6.0)
/// - 语言:[C# 10](https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-10)
///
/// ## 包说明
///
/// - `Furion.Core`:无第三方依赖,可在 `.NET 6` 所有项目类型中运行。
/// - `Furion`:内部依赖 `Furion.Core` 且无第三方依赖,**聚焦 `Web` 应用**,采用共享框架 `<FrameworkReference Include="Microsoft.AspNetCore.App" />` 模式
/// </remarks>
public void MarkdownTest()
{
// ....
}

v3.5.7(已发布)
- 新特性
-
Options选项属性支持自定义Key名称,[MapSettings("key")]#I5B2HN - 事件总线模块事件
Id支持枚举类型 2f328aa - 事件总线模块发布者
PublishAsync和PublishDelayAsync重载 2f328aa - 事件总线模块扩展方法:
Enum.ParseToString()和String.ParseToEnum()2f328aa -
Furion和SqlSugar脚手架 🆕🆕🆕 8d9293d -
Dapper扩展全局配置委托 #I5AYFX -
sql转实体支持多种命名策略(纯大写,纯小写,带下划线分割等等),如Oracle数据库 a90e245 -
FS.InitalContentTypeProvider()扩展方法,获取系统内所有支持的Content-Type文件提供器 6099900
-
- 突破性变化
- 彻底解决了
Furion不能单文件发布的问题 7e8e0b7
- 彻底解决了
- 问题修复
- 其他更改
- 文档
-
Furion单文件发布文档 -
Furion + SqlSugar脚手架文档 - 事件总线文档、选项文档、即时通讯文档、
.NET5升级.NET6文档、依赖注入文档、跨域文档、数据加解密文档
-
- 本期亮点
- 事件总线
Id支持枚举类型
查看变化
EventSubscribe("TO:DO")] // 字符串类型
public async Task EventHandler1(EventHandlerExecutingContext context)
{
// ....
}
[EventSubscribe(YourEnum.Some)] // 枚举类型
public async Task EventHandler2(EventHandlerExecutingContext context)
{
var eventEnum = context.Source.EventId.ParseToEnum(); // 将事件 Id 转换成枚举对象
// ....
}
- 事件总线发布支持更简单调用
查看变化
// 旧版本
await _eventPublisher.PublishAsync(new ChannelEventSource("ToDo:Create", name));
// 新版本
await _eventPublisher.PublishAsync("ToDo:Create", name);
await _eventPublisher.PublishAsync(YourEnum.Some); // 也支持枚举
- 选项支持属性自定义配置
Key
查看变化
"AppInfo": {
"Name": "Furion",
"Version": "1.0.0",
"Company_Name": "Baiqian" // 可以和属性不一样
}
public class AppInfoOptions : IConfigurableOptions
{
public string Name { get; set; }
public string Version { get; set; }
[MapSettings("Company_Name")] // 支持自定义
public string Company { get; set; }
}
- 日志规范化模板
查看变化
// 生成模板字符串
var template = TP.Wrapper("Furion 框架", "让 .NET 开发更简单,更通用,更流行。",
"[作者] 百小僧",
"[当前版本] v3.5.3",
"[文档地址] https://furion.net",
"[Copyright] 百小僧, 百签科技(广东)有限公司");
Console.WriteLine(template);
输出结果
┏━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━
┣ 让 .NET 开发更简单,更通用,更流行。
┣
┣ 作者: 百小僧
┣ 当前版本: v3.5.3
┣ 文档地址: https://furion.net
┣ Copyright: 百小僧, 百签科技(广东)有限公司
┗━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━
v3.4.2(已发布)
- 新特性
- 规范化文件
EnableAllGroups功能,可以将多个分组合并到一个分组中 9277b98 -
angular-utils客户端工具库,专门处理angular项目接口代理问题 6c70584 -
Swagger支持单个接口更多描述功能(支持html)e5e1db0 -
Swagger接口[Obsolete]过时支持功能 e5e1db0 - 动态
API的[ApiDescriptionSettings]特性 和DynamicApiControllerSettings配置 的ForceWithRoutePrefix参数,支持强制复写[Route]特性并添加DefaultRoutePrefix#I59B74
- 规范化文件
- 突破性变化
- 默认内置
GBK,Windows-1252,Shift-JIS,GB2312等编码支持 c456ecb -
Furion和SqlSugar脚手架
- 默认内置
- 问题修复
-
<inheritdoc />不能跨程序集问题 3b9d39c -
<inheritdoc />不支持带参数,不支持隐式实现接口注释问题 #I59A6W#note_10699021 -
v3.3.1版本导致Swagger不能显示问题 6763352 - 远程请求、
JSON以及Web页面不支持GBK,GB2312等国标编码问题 c456ecb - 远程请求响应报文设置了
Content-Type:charset=不能自动转换编码问题 c456ecb
-
- 其他更改
-
axios-utils.ts和angular-utils.ts多客户端支持
-
- 文档
- 本期亮点
- 启用
All Groups分组功能
查看变化
有时候我们为了更好的对接口进行归类,配置了 Swagger 多个分组的功能,但这样也对生成客户端请求代码造成了困扰,所以添加了新的配置:
{
"SpecificationDocumentSettings": {
"EnableAllGroups": true
}
}
- 接口过时控制
查看变化
当我们某个接口已经过时,提示尽早调用最新接口,只需要在方法上面贴 [Obsolete] 即可,如:
[Obsolete("GetName() 已经过时,请调用 GetFrameworkName() 替代")]
public string GetName()
{
return nameof(Furion);
}
[Obsolete]
public string Other()
{
// ...
}

- 单一接口更多描述
查看变化
在该版本新增了 [ApiDescriptionSettings] 的 Description 属性,支持定义更多描述,如:
[ApiDescriptionSettings(Description = "我是一段描述,显示更多内容 <button>我是按钮</button>")]
public string add()
{
//....
}

v3.3.3(已发布)
- 新特性
- 突破性变化
- 代码注释,规范化文档注释
inheritdoc语法支持 ❤️️️️ #159A6W -
.NET所有依赖包至v6.0.5版本
- 代码注释,规范化文档注释
- 问题修复
- 自定义全局异常
Exception后导致获取错误行号,文件空异常问题 #I53EGM - 配置数据库上下文传递空委托导致空引用异常问题 #I519AW
- 字符串模板模板
Render扩展方法返回void问题,应该返回stringGithub-#99 - 远程请求文件上传出现空情况问题(原因是缺失
Content-Type)I57ZMN
- 自定义全局异常
- 其他更改
- 文档
- 粘土对象序列化
JSON配置文档 - 前端解密
JWT文档 - 将
byte[]转url文档 - 二级虚拟目录部署文档,远程请求文档,文件上传文档,安全授权文档、规范化文档
- 粘土对象序列化
- 本期亮点
- ❤️️️️ 根据文件名获取
MIME或Content-Type类型
- ❤️️️️ 根据文件名获取
查看变化
var success = FS.TryGetContentType("image.png", out var contentType); // image/png
- ❤️️️️ 支持
Swagger配置登录后才能访问
{
"SpecificationDocumentSettings": {
"LoginInfo": {
"Enabled": true,
"CheckUrl": "检查登录地址",
"SubmitUrl": "提交登录地址"
}
}
}

- ❤️️️️ 支持代码注释继承,Swagger 文档注释也支持
查看变化
/// <inheritdoc cref="ITestInheritdoc" />
public class TestInheritdoc : ITestInheritdoc, IDynamicApiController
{
/// <inheritdoc cref="ITestInheritdoc.GetName"/>
public string GetName()
{
return "Furion";
}
/// <inheritdoc />
public string GetVersion()
{
return "3.3.3";
}
}
/// <summary>
/// 测试注释继承
/// </summary>
public interface ITestInheritdoc
{
/// <summary>
/// 获取名称
/// </summary>
/// <returns></returns>
string GetName();
/// <summary>
/// 获取版本
/// </summary>
/// <returns></returns>
string GetVersion();
}

v3.2.0(已发布)
- 新特性
- 突破性变化
- 所有依赖包至最新版
- 依赖注入模块核心代码,移除注册服务采用反射机制,减少反射性能损耗 acdb315
- 问题修复
- 其他更改
- 文档
- 定时任务文档,日志文档
- 文件上传/下载 文档,包含单文件/多文件/Base64/Byte[]
v3.1.0(已发布)
- 新特性
- 突破性变化
-
.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(已发布,.NET6)
Furion v3.x 版本采用.NET6 构建。
- 新特性
- 远程请求支持
GET请求自动转换类类型类型对象 #I4HR5Q
- 远程请求支持
- 突破性变化
- 全面支持
.NET6版本
- 全面支持
- 问题修复
- 其他更改
-
d0244dToPagedList泛型约束
-
- 文档
- 查看 .NET6 一分钟入门
- 查看 Furion v2 升级 v3
- 特别鸣谢