Files
Moonlight/Moonlight.ApiServer/Startup/Startup.Base.cs

62 lines
2.0 KiB
C#

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using MoonCore.Extended.Extensions;
using MoonCore.Extensions;
using MoonCore.Helpers;
using Moonlight.ApiServer.Configuration;
using Moonlight.ApiServer.Plugins;
namespace Moonlight.ApiServer.Startup;
public static partial class Startup
{
private static void AddBase(this WebApplicationBuilder builder, IPluginStartup[] startups)
{
builder.Services.AutoAddServices<IAssemblyMarker>();
builder.Services.AddHttpClient();
builder.Services.AddApiExceptionHandler();
// Configure controllers
var mvcBuilder = builder.Services.AddControllers();
// Add plugin assemblies as application parts
foreach (var pluginStartup in startups.Select(x => x.GetType().Assembly).Distinct())
mvcBuilder.AddApplicationPart(pluginStartup.GetType().Assembly);
}
private static void UseBase(this WebApplication application)
{
application.UseRouting();
application.UseExceptionHandler();
}
private static void MapBase(this WebApplication application)
{
application.MapControllers();
// Frontend
var configuration = AppConfiguration.CreateEmpty();
application.Configuration.Bind(configuration);
if (configuration.Frontend.EnableHosting)
application.MapFallbackToController("Index", "Frontend");
}
private static void ConfigureKestrel(this WebApplicationBuilder builder)
{
var configuration = AppConfiguration.CreateEmpty();
builder.Configuration.Bind(configuration);
builder.WebHost.ConfigureKestrel(kestrelOptions =>
{
var maxUploadInBytes = ByteConverter
.FromMegaBytes(configuration.Kestrel.UploadLimit)
.Bytes;
kestrelOptions.Limits.MaxRequestBodySize = maxUploadInBytes;
});
}
}