Files
Docker/CloudBuilder/CloudBuilder.Web.Entry/Program.cs
T
2026-08-19 14:11:17 +08:00

127 lines
4.4 KiB
C#

using CloudBuilder.Core.DependencyInjection.Form;
using CloudBuilder.Core.Extensions;
using CloudBuilder.Core.Service;
using CloudBuilder.Security.Data;
using CloudBuilder.Security.Service;
using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Http.Json;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.Extensions.FileProviders;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System.Text.Json.Serialization;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Initialize();
builder.Services.Configure<WebAuthnOptions>(builder.Configuration.GetSection("WebAuthn"));
// Add services to the container.
builder.Services.AddHttpClient().AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
});
builder.Services.AddSpaStaticFiles(options => { options.RootPath = "dist"; });
//================================上传文件==============================
//上传文件大小限制Kestrel设置
builder.Services.Configure<KestrelServerOptions>(options =>
{
// Set the limit to 256 MB
options.Limits.MaxRequestBodySize = null;
});
//上传文件大小限制IIS设置
builder.Services.Configure<IISServerOptions>(options =>
{
options.MaxRequestBodySize = null;
});
builder.Services.Configure<FormOptions>(options =>
{
options.ValueLengthLimit = int.MaxValue;
options.MultipartBodyLengthLimit = int.MaxValue;
options.MultipartHeadersLengthLimit = int.MaxValue;
});
/*
如果是在VS中调试的项目
需要修改项目根目录.vs\CloudBuilder\config\applicationhost.config 中找到<requestFiltering>节点添加
<requestLimits maxAllowedContentLength="1073741824" />
如果是发布到IIS上的项目
找到web.config在<system.webServer>节点下添加。注意以后每次发布不要覆盖掉该web.config
<system.web>
<compilation debug="true" targetFramework="4.5.2">
<assemblies>
<add assembly="System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
</compilation>
<pages controlRenderingCompatibilityVersion="4.0" />
<httpRuntime maxRequestLength="2147483647" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>
</security>
</system.webServer>
IIS內修改ASP中修改最大请求实体主体限制
*/
//================================上传文件==============================
var app = builder.Build();
string urlOrigins = app.Configuration["UrlOrigins"];
//跨域是否使用SSL
if (urlOrigins.Contains("https"))
{
app.UseHttpsRedirection();
}
app.UseCors(b =>
{
b.WithOrigins(urlOrigins.Split(',')).AllowAnyMethod().AllowAnyHeader().AllowCredentials();
});
//================================添加静态文件映射,在IIS及vs启动文件applicationhost.config的地方加入无效
//开发环境使用以下设置,如果上线还需在IIS设置MIME
var provider = FileExtension.GetFileExtensionContentTypeProvider();
provider.Mappings[".mp4"] = "application/x-mpegURL";
provider.Mappings[".flac"] = "audio/x-flac";
provider.Mappings[".m3u8"] = "application/vnd.apple.mpegurl";
provider.Mappings[".lrc"] = "application/octet-stream";
//虚拟文件,App.Configuration[VirtualPathPolicy.VirtualPath_RealPath]这个路径一定要存在,不然直接出错
string physicalDir = app.Configuration["FileServiceSettings:PhysicalFileDirectory"];
if (!string.IsNullOrEmpty(physicalDir))
{
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(app.Configuration["FileServiceSettings:PhysicalFileDirectory"]),
RequestPath = app.Configuration["FileServiceSettings:RequestPath"],
ContentTypeProvider = provider
});
}
//================================添加静态文件映射
// Configure the HTTP request pipeline.
app.UseAuthentication();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();
app.UseSpaStaticFiles();
app.UseSpa(configuration => { });
app.Run();