Files
xSaherElmAiApi/Program.cs
T

133 lines
3.0 KiB
C#

using System.Reflection;
using IdentityModel.AspNetCore.OAuth2Introspection;
using xAiApi.Extensions;
using xCommons.Configurations;
using xCommons.Extensions;
using xHttpService.DI;
using System.Text.Json.Serialization;
using System.Text.Json;
using xIdentityService.DI;
var builder = WebApplication.CreateBuilder(args);
//
#region Register services ...
//
// Register Validation Provider and all XCommons Module Services ...
builder.Services.AddXCommons();
//
// Register App Configuration ...
builder.Services.AddXAppConfiguration(builder.Configuration);
var appConfiguration = builder.Services.GetRegisteredService<XAppConfiguration>();
//
// Register Allowed Origins ...
builder.Services.AddXCors(appConfiguration.AllowedOrigins);
//
// Register Swagger ...
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
builder.Services.AddXSwagger(builder.Configuration, xmlFilePath: xmlPath);
//
// Register HttpService ...
builder.Services.AddXHttpService(builder.Configuration);
//
// Add Api V1 Versioning ...
builder.Services.AddXApiV1Versioning();
//
// OAuthIntrospectin Http Client Handler ...
// this is for handling SSLErrors ...
builder.Services.AddHttpClient(OAuth2IntrospectionDefaults.BackChannelHttpClientName)
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true
};
});
//
// Register Authorizations ...
builder.Services.AddXAuthorization();
//
// Mapping Controllers ...
builder.Services.AddControllers()
.AddJsonOptions(x =>
{
//
// Optional but recommended for .NET 8+:
// Allows reading properties case-insensitively (e.g., "myProp" matches "MyProp") ...
x.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
//
// This tells STJ to ignore circular references instead of throwing an exception ...
x.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
//
// Camel Case Naming Policy ...
x.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});
//
// Register XIdentity Service ...
builder.Services.AddXIdentityService(
configuration: builder.Configuration,
lifeTime: ServiceLifetime.Scoped
);
#endregion
//
// Creating Application ...
var app = builder.Build();
//
#region Using Middlewares ...
//
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//
// Use Swagger Middleware ...
app.UseXSwagger();
//
// Force Https Redirection ...
app.UseHttpsRedirection();
//
// Using Cors ...
app.UseXCors();
//
// Using Routing ...
app.UseRouting();
//
// Use xIdentityService ...
app.UseXIdentityService();
//
// Use Authorization ...
app.UseAuthorization();
//
// Using Endpoints ...
app.UseEndpoints(endpoints =>
{
_ = endpoints.MapControllers();
});
#endregion
//
// Runing Application ...
app.Run();