Program.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Database.Database;
  2. //using CMS.Portal.Business.Questions;
  3. using CMS.Business.Portal;
  4. using CMS.Business.User;
  5. using Microsoft.AspNetCore.Authentication.JwtBearer;
  6. using Microsoft.EntityFrameworkCore;
  7. using Microsoft.IdentityModel.Tokens;
  8. using System.Globalization;
  9. using System.Reflection;
  10. using System.Text;
  11. using System.Xml;
  12. var builder = WebApplication.CreateBuilder(args);
  13. // Log4net
  14. XmlDocument log4netConfig = new();
  15. log4netConfig.Load(File.OpenRead("log4net.config"));
  16. var repo = log4net.LogManager.CreateRepository(
  17. Assembly.GetEntryAssembly(),
  18. typeof(log4net.Repository.Hierarchy.Hierarchy));
  19. log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);
  20. builder.Services.AddControllers();
  21. builder.Services.AddEndpointsApiExplorer();
  22. builder.Services.AddSwaggerGen();
  23. // DbContext
  24. var connection = builder.Configuration.GetValue<string>("Connection");
  25. builder.Services.AddDbContext<ModelContext>(options =>
  26. options.UseOracle(connection, providerOptions =>
  27. providerOptions.CommandTimeout(60)
  28. .UseRelationalNulls(true)
  29. .MinBatchSize(2)
  30. .UseOracleSQLCompatibility("11")));
  31. // Business services
  32. //builder.Services.AddScoped<IQuestionBusiness, QuestionBusinessImpl>();
  33. builder.Services.AddScoped<IUserBusiness, UserBusinessImpl>();
  34. // JWT
  35. builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
  36. .AddJwtBearer(o =>
  37. {
  38. o.TokenValidationParameters = new TokenValidationParameters
  39. {
  40. ValidIssuer = builder.Configuration["Jwt:Issuer"],
  41. ValidAudience = builder.Configuration["Jwt:Audience"],
  42. IssuerSigningKey = new SymmetricSecurityKey(
  43. Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!)),
  44. ValidateIssuer = true,
  45. ValidateAudience = true,
  46. ValidateLifetime = true, // nên bật
  47. ValidateIssuerSigningKey = true
  48. };
  49. });
  50. builder.Services.AddAuthorization();
  51. // Localization
  52. builder.Services.Configure<RequestLocalizationOptions>(options =>
  53. {
  54. var cultures = new List<CultureInfo> { new("my"), new("en") };
  55. options.DefaultRequestCulture = new("my");
  56. options.SupportedCultures = cultures;
  57. options.SupportedUICultures = cultures;
  58. });
  59. var app = builder.Build();
  60. // Swagger (chỉ bật khi dev)
  61. if (app.Environment.IsDevelopment())
  62. {
  63. app.UseSwagger();
  64. app.UseSwaggerUI();
  65. }
  66. app.UseHttpsRedirection();
  67. app.UseRequestLocalization();
  68. app.UseAuthentication();
  69. app.UseAuthorization();
  70. app.MapControllers();
  71. app.Run();