From e414cd5d4f4cfc6370ef1b90b06b272bd76207cc Mon Sep 17 00:00:00 2001 From: Yuuki Wesp Date: Fri, 19 Jan 2024 01:13:18 +0300 Subject: [PATCH] add controllers with views --- Directory.Build.props | 2 +- .../Controllers/ControllersFeature.cs | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Directory.Build.props b/Directory.Build.props index 3b6fdf8..3dd9daa 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,7 +1,7 @@ net8.0 - 1.0-rc.6 + 1.0-rc.7 false true strict diff --git a/src/features/Controllers/ControllersFeature.cs b/src/features/Controllers/ControllersFeature.cs index 3619540..8782e28 100644 --- a/src/features/Controllers/ControllersFeature.cs +++ b/src/features/Controllers/ControllersFeature.cs @@ -33,6 +33,30 @@ public override void BeforeRun(WebApplication webBuilder) => webBuilder.MapControllers(); } +[PublicAPI] +public record ControllersWithViewsFeature(Action? Configure) : AppFeature +{ + public override void BeforeRegistrations(WebApplicationBuilder webBuilder) + { + webBuilder.Services.AddTransient(s => + s.GetRequiredService().HttpContext!.User); + webBuilder.Services.AddHttpContextAccessor(); + webBuilder.Services + .AddControllersWithViews(this.Configure) + .ConfigureApiBehaviorOptions(options => options.InvalidModelStateResponseFactory = context => + new BadRequestObjectResult(context.ModelState) + { + ContentTypes = { System.Net.Mime.MediaTypeNames.Application.Json } + }) + .AddJson() + .AddEndpointsApiExplorer(); + } + + public override void BeforeRun(WebApplication webBuilder) + => webBuilder.MapControllers(); +} + + [PublicAPI] public record CorsFeature(Action Configure) : AppFeature { @@ -66,6 +90,8 @@ public static class ControllersFeatureIAppBuilder { public static IAppBuilder Controllers(this IAppBuilder builder, Action? config = null) => builder.InjectFeature(() => new ControllersFeature(config)); + public static IAppBuilder ControllersWithViews(this IAppBuilder builder, Action? config = null) + => builder.InjectFeature(() => new ControllersWithViewsFeature(config)); public static IAppBuilder Cors(this IAppBuilder builder, Action config) => builder.InjectFeature(() => new CorsFeature(config)); }