StartupHelper.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System.Text;
  2. using Mapster;
  3. using MapsterMapper;
  4. using Microsoft.IdentityModel.Tokens;
  5. using Microsoft.OpenApi.Models;
  6. using XF.Domain.Entities;
  7. using XF.Domain.Exceptions;
  8. using XF.Domain.Options;
  9. namespace FileStorage.Host
  10. {
  11. public static class StartupHelper
  12. {
  13. /// <summary>
  14. /// Swagger
  15. /// </summary>
  16. /// <param name="services"></param>
  17. /// <returns></returns>
  18. public static IServiceCollection RegisterSwagger(this IServiceCollection services)
  19. {
  20. services.AddSwaggerGen(c =>
  21. {
  22. //添加文档
  23. c.SwaggerDoc("v1", new OpenApiInfo() { Title = "FileStorage Api", Version = "v1.0", Description = "文件存储api" });
  24. var files = Directory.GetFiles(AppContext.BaseDirectory).Where(d => d.EndsWith(".xml"));
  25. foreach (var file in files)
  26. {
  27. c.IncludeXmlComments(file, true);
  28. }
  29. var scheme = new OpenApiSecurityScheme()
  30. {
  31. Description = "Authorization header. \r\nExample: 'Bearer ***'",
  32. Reference = new OpenApiReference
  33. {
  34. Type = ReferenceType.SecurityScheme,
  35. Id = "Authorization"
  36. },
  37. Scheme = "oauth2",
  38. Name = "Authorization",
  39. In = ParameterLocation.Header,
  40. Type = SecuritySchemeType.ApiKey,
  41. };
  42. c.AddSecurityDefinition("Authorization", scheme);
  43. var requirement = new OpenApiSecurityRequirement();
  44. requirement[scheme] = new List<string>();
  45. c.AddSecurityRequirement(requirement);
  46. });
  47. return services;
  48. }
  49. /// <summary>
  50. /// Cors
  51. /// </summary>
  52. /// <param name="services"></param>
  53. /// <param name="configuration"></param>
  54. /// <param name="corsOrigins"></param>
  55. /// <returns></returns>
  56. public static IServiceCollection RegisterCors(this IServiceCollection services, ConfigurationManager configuration, string corsOrigins)
  57. {
  58. services.AddCors(options =>
  59. {
  60. options.AddPolicy(name: corsOrigins,
  61. builder =>
  62. {
  63. var origins = configuration.GetSection("Cors:Origins").Get<string[]>();
  64. builder.SetIsOriginAllowed(a =>
  65. {
  66. return origins.Any(origin => origin.StartsWith("*.", StringComparison.Ordinal)
  67. ? a.EndsWith(origin[1..], StringComparison.Ordinal)
  68. : a.Equals(origin, StringComparison.Ordinal));
  69. })
  70. .AllowAnyHeader()
  71. .AllowAnyMethod()
  72. .AllowCredentials();
  73. });
  74. });
  75. return services;
  76. }
  77. /// <summary>
  78. /// Mapper
  79. /// </summary>
  80. /// <param name="services"></param>
  81. /// <returns></returns>
  82. public static IServiceCollection RegisterMapper(this IServiceCollection services)
  83. {
  84. var config = TypeAdapterConfig.GlobalSettings;
  85. config.ForDestinationType<IDataPermission>()
  86. .Ignore(d => d.CreatorId)
  87. .Ignore(d => d.CreatorOrgId)
  88. .Ignore(d => d.CreatorOrgCode)
  89. .Ignore(d => d.AreaId);
  90. config.ForDestinationType<IWorkflow>()
  91. .Ignore(d => d.WorkflowId)
  92. .Ignore(d => d.ExpiredTimeConfigId)
  93. .Ignore(d => d.AssignOrgCodes)
  94. .Ignore(d => d.AssignUserIds);
  95. config.ForDestinationType<IHasCreationTime>()
  96. .Ignore(d => d.CreationTime);
  97. config.ForDestinationType<IHasDeletionTime>().Ignore(d => d.DeletionTime);
  98. config.ForDestinationType<ISoftDelete>().Ignore(d => d.IsDeleted);
  99. config.ForDestinationType<IHasModificationTime>().Ignore(d => d.LastModificationTime);
  100. services.AddSingleton(config);
  101. services.AddScoped<IMapper, ServiceMapper>();
  102. return services;
  103. }
  104. }
  105. }