|
|
|
|
|
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
|
|
|
|
|
//
|
|
|
|
|
|
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
|
|
|
|
|
//
|
|
|
|
|
|
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
|
|
|
|
|
|
|
|
|
|
|
// 顶层语句(Top-level statements):
|
|
|
|
|
|
// .NET 6+ 开始允许不写传统的 Program.Main 方法,文件中的语句会直接作为程序入口执行。
|
|
|
|
|
|
// 这里通过 Furion 的 Serve.Run 启动整个 Web 应用。
|
|
|
|
|
|
Serve.Run(RunOptions.Default.AddWebComponent<WebComponent>());
|
|
|
|
|
|
|
|
|
|
|
|
public class WebComponent : IWebComponent
|
|
|
|
|
|
{
|
|
|
|
|
|
public void Load(WebApplicationBuilder builder, ComponentContext componentContext)
|
|
|
|
|
|
{
|
|
|
|
|
|
// WebApplicationBuilder 是 ASP.NET Core 的宿主构建器。
|
|
|
|
|
|
// 可以把它理解成“程序正式启动前的总配置对象”。
|
|
|
|
|
|
|
|
|
|
|
|
// 设置日志过滤:
|
|
|
|
|
|
// 这里把微软基础设施层的高频日志过滤掉,避免控制台被大量框架日志刷屏。
|
|
|
|
|
|
builder.Logging.AddFilter((provider, category, logLevel) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
// Lambda 表达式 => 是 C# 里常见的匿名函数写法。
|
|
|
|
|
|
// category 表示日志分类名,通常类似命名空间。
|
|
|
|
|
|
return !new[] { "Microsoft.Hosting", "Microsoft.AspNetCore" }.Any(u => category.StartsWith(u)) && logLevel >= LogLevel.Information;
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// 配置 Kestrel:
|
|
|
|
|
|
// Kestrel 是 ASP.NET Core 自带的 Web 服务器。
|
|
|
|
|
|
// 这里统一调大超时时间,并取消请求体大小限制,适合文件上传和长连接场景。
|
|
|
|
|
|
builder.WebHost.ConfigureKestrel(u =>
|
|
|
|
|
|
{
|
|
|
|
|
|
u.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30);
|
|
|
|
|
|
u.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(30);
|
|
|
|
|
|
// null 表示不限制请求体大小。
|
|
|
|
|
|
// 实际生产中是否开放,要结合上传场景和安全策略决定。
|
|
|
|
|
|
u.Limits.MaxRequestBodySize = null;
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|