From c8c504b3be0650c3313ccb8c15f3ebaf3fc0a6f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D1=8F=20=D0=91=D0=B8=D0=B7=D1=8E=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0?= Date: Thu, 23 May 2024 14:07:40 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D0=B0=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=8C=20warnings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudApp/Data/DataSaubStatDto.cs | 3 +++ .../Data/ProcessMaps/ProcessMapPlanReamDto.cs | 2 +- AsbCloudApp/Data/Progress/ReportProgressDto.cs | 2 +- .../Data/WellOperation/WellOperationDto.cs | 3 +++ AsbCloudApp/Services/ITelemetryService.cs | 7 +++++++ AsbCloudInfrastructure/MemoryCacheExtentions.cs | 17 +++++++++++++---- AsbCloudInfrastructure/Repository/CacheBase.cs | 2 +- .../Repository/NotificationRepository.cs | 2 +- .../Services/Email/BaseFactory.cs | 8 ++++---- .../Services/Email/DrillingMailBodyFactory.cs | 4 ++-- .../Email/EmailNotificationTransportService.cs | 6 +++--- .../Email/WellFinalDocumentMailBodyFactory .cs | 2 +- .../Services/HelpPageService.cs | 2 +- .../Services/ManualCatalogService.cs | 2 +- .../Services/MeasureService.cs | 2 +- .../Services/ReduceSamplingService.cs | 2 +- .../Services/SAUB/TelemetryUserService.cs | 2 +- .../Clients/IDrillTestControllerClient.cs | 2 +- .../DetectedOperationControllerTests.cs | 3 --- .../ProcessMapReportDrillingControllerTest.cs | 2 +- .../WellOperationControllerTest.cs | 8 +++----- .../Background/BackgroundWorkerTest.cs | 6 +++--- .../Services/HelpPageServiceTest.cs | 12 ++++++------ .../EmailNotificationTransportServiceTests.cs | 2 +- AsbCloudWebApi/Controllers/DrillerController.cs | 4 ++-- AsbCloudWebApi/Extensions.cs | 2 +- 26 files changed, 63 insertions(+), 46 deletions(-) diff --git a/AsbCloudApp/Data/DataSaubStatDto.cs b/AsbCloudApp/Data/DataSaubStatDto.cs index ceae4f9d..30a09081 100644 --- a/AsbCloudApp/Data/DataSaubStatDto.cs +++ b/AsbCloudApp/Data/DataSaubStatDto.cs @@ -3,6 +3,9 @@ using AsbCloudApp.Data.WellOperation; namespace AsbCloudApp.Data { + /// + /// dto для хранения данных статистики сауб + /// public class DataSaubStatDto:IId { /// diff --git a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanReamDto.cs b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanReamDto.cs index 9d6438dc..853a7fcd 100644 --- a/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanReamDto.cs +++ b/AsbCloudApp/Data/ProcessMaps/ProcessMapPlanReamDto.cs @@ -72,7 +72,7 @@ public class ProcessMapPlanReamDto : ProcessMapPlanBaseDto, IValidatableObject public double Torque { get; set; } /// - public IEnumerable Validate(ValidationContext validationContext) + public override IEnumerable Validate(ValidationContext validationContext) { if (DepthEnd < DepthStart) yield return new ValidationResult( diff --git a/AsbCloudApp/Data/Progress/ReportProgressDto.cs b/AsbCloudApp/Data/Progress/ReportProgressDto.cs index b14166e9..400b6c9f 100644 --- a/AsbCloudApp/Data/Progress/ReportProgressDto.cs +++ b/AsbCloudApp/Data/Progress/ReportProgressDto.cs @@ -8,5 +8,5 @@ public class ReportProgressFinalDto : ReportProgressDto /// /// файл /// - public FileInfoDto file { get; set; } + public FileInfoDto? file { get; set; } } diff --git a/AsbCloudApp/Data/WellOperation/WellOperationDto.cs b/AsbCloudApp/Data/WellOperation/WellOperationDto.cs index 17015451..6a0a473e 100644 --- a/AsbCloudApp/Data/WellOperation/WellOperationDto.cs +++ b/AsbCloudApp/Data/WellOperation/WellOperationDto.cs @@ -4,6 +4,9 @@ using System.ComponentModel.DataAnnotations; namespace AsbCloudApp.Data.WellOperation; +/// +/// Операция по скважине +/// public class WellOperationDto : ItemInfoDto, IId, IWellRelated, diff --git a/AsbCloudApp/Services/ITelemetryService.cs b/AsbCloudApp/Services/ITelemetryService.cs index 576086e6..a981be33 100644 --- a/AsbCloudApp/Services/ITelemetryService.cs +++ b/AsbCloudApp/Services/ITelemetryService.cs @@ -70,6 +70,13 @@ namespace AsbCloudApp.Services /// /// Task MergeAsync(int from, int to, CancellationToken token); + + /// + /// Получить телеметрию по последней дате + /// + /// + /// + /// Task GetTelemetriesInfoByLastData(DateTimeOffset from, CancellationToken token); } } \ No newline at end of file diff --git a/AsbCloudInfrastructure/MemoryCacheExtentions.cs b/AsbCloudInfrastructure/MemoryCacheExtentions.cs index 0153778a..eb57af3f 100644 --- a/AsbCloudInfrastructure/MemoryCacheExtentions.cs +++ b/AsbCloudInfrastructure/MemoryCacheExtentions.cs @@ -47,13 +47,17 @@ namespace AsbCloudInfrastructure public static Task> GetOrCreateBasicAsync(this IMemoryCache memoryCache, Func>> getterAsync, CancellationToken token) { var key = typeof(T).FullName; - var cache = memoryCache.GetOrCreateAsync(key, async (cacheEntry) => { + if (key == null) + return Task.FromResult(Enumerable.Empty()); + + var cache = memoryCache.GetOrCreateAsync(key, async (cacheEntry) => + { cacheEntry.AbsoluteExpirationRelativeToNow = CacheOlescence; cacheEntry.SlidingExpiration = CacheOlescence; var entities = await getterAsync(token); return entities; }); - return cache; + return cache!; } /// @@ -84,12 +88,13 @@ namespace AsbCloudInfrastructure public static IEnumerable GetOrCreateBasic(this IMemoryCache memoryCache, Func> getter) { var key = typeof(T).FullName; - var cache = memoryCache.GetOrCreate(key, cacheEntry => { + var cache = memoryCache.GetOrCreate(key, cacheEntry => + { cacheEntry.AbsoluteExpirationRelativeToNow = CacheOlescence; cacheEntry.SlidingExpiration = CacheOlescence; return getter(); }); - return cache; + return cache!; } /// @@ -102,6 +107,10 @@ namespace AsbCloudInfrastructure where T : class { var key = typeof(T).FullName; + + if (key == null) + return; + memoryCache.Remove(key); } } diff --git a/AsbCloudInfrastructure/Repository/CacheBase.cs b/AsbCloudInfrastructure/Repository/CacheBase.cs index 84f702df..53ac0b93 100644 --- a/AsbCloudInfrastructure/Repository/CacheBase.cs +++ b/AsbCloudInfrastructure/Repository/CacheBase.cs @@ -43,7 +43,7 @@ namespace AsbCloudInfrastructure.Repository cacheEntry.Value = entities; return entities; }); - return cache; + return cache!; } protected virtual Task> GetCacheAsync(CancellationToken token) diff --git a/AsbCloudInfrastructure/Repository/NotificationRepository.cs b/AsbCloudInfrastructure/Repository/NotificationRepository.cs index 7e184f02..ae2ec649 100644 --- a/AsbCloudInfrastructure/Repository/NotificationRepository.cs +++ b/AsbCloudInfrastructure/Repository/NotificationRepository.cs @@ -77,7 +77,7 @@ public class NotificationRepository : CrudRepositoryBase UpdateRangeAsync(IEnumerable notifications, CancellationToken cancellationToken) + public override async Task UpdateRangeAsync(IEnumerable notifications, CancellationToken cancellationToken) { if (!notifications.Any()) return 0; diff --git a/AsbCloudInfrastructure/Services/Email/BaseFactory.cs b/AsbCloudInfrastructure/Services/Email/BaseFactory.cs index 11c8feaa..c0431016 100644 --- a/AsbCloudInfrastructure/Services/Email/BaseFactory.cs +++ b/AsbCloudInfrastructure/Services/Email/BaseFactory.cs @@ -16,10 +16,10 @@ namespace AsbCloudInfrastructure.Services.Email public BaseFactory(IConfiguration configuration) { - platformName = configuration.GetValue("email:platformName", "Цифровое бурение"); - platformUrl = configuration.GetValue("email:platformUrl", "https://cloud.digitaldrilling.ru/"); - companyName = configuration.GetValue("email:companyName", "ООО \"Цифровое бурение\""); - supportMail = configuration.GetValue("email:supportMail", "support@digitaldrilling.ru"); + platformName = configuration.GetValue("email:platformName", "Цифровое бурение") ?? string.Empty; + platformUrl = configuration.GetValue("email:platformUrl", "https://cloud.digitaldrilling.ru/") ?? string.Empty; + companyName = configuration.GetValue("email:companyName", "ООО \"Цифровое бурение\"") ?? string.Empty; + supportMail = configuration.GetValue("email:supportMail", "support@digitaldrilling.ru") ?? string.Empty; } public static string GetOrEmptyImageBase64(string resourceFileName) diff --git a/AsbCloudInfrastructure/Services/Email/DrillingMailBodyFactory.cs b/AsbCloudInfrastructure/Services/Email/DrillingMailBodyFactory.cs index ba0da560..d1371110 100644 --- a/AsbCloudInfrastructure/Services/Email/DrillingMailBodyFactory.cs +++ b/AsbCloudInfrastructure/Services/Email/DrillingMailBodyFactory.cs @@ -12,8 +12,8 @@ namespace AsbCloudInfrastructure.Services.Email public DrillingMailBodyFactory(IConfiguration configuration) : base(configuration) { - platformName = configuration.GetValue("email:platformName", "Цифровое бурение"); - platformUrl = configuration.GetValue("email:platformUrl", "https://cloud.digitaldrilling.ru/"); + platformName = configuration.GetValue("email:platformName", "Цифровое бурение") ?? string.Empty; + platformUrl = configuration.GetValue("email:platformUrl", "https://cloud.digitaldrilling.ru/") ?? string.Empty; } public override string MakeSubject(WellDto well, string action) diff --git a/AsbCloudInfrastructure/Services/Email/EmailNotificationTransportService.cs b/AsbCloudInfrastructure/Services/Email/EmailNotificationTransportService.cs index 2eec7b27..88fbe691 100644 --- a/AsbCloudInfrastructure/Services/Email/EmailNotificationTransportService.cs +++ b/AsbCloudInfrastructure/Services/Email/EmailNotificationTransportService.cs @@ -29,9 +29,9 @@ namespace AsbCloudInfrastructure.Services.Email { this.userRepository = userRepository; - this.sender = configuration.GetValue("email:sender", string.Empty); - this.smtpPassword = configuration.GetValue("email:password", string.Empty); - this.smtpServer = configuration.GetValue("email:smtpServer", string.Empty); + this.sender = configuration.GetValue("email:sender", string.Empty) ?? string.Empty; + this.smtpPassword = configuration.GetValue("email:password", string.Empty) ?? string.Empty; + this.smtpServer = configuration.GetValue("email:smtpServer", string.Empty) ?? string.Empty; var configError = string.IsNullOrEmpty(this.sender) || string.IsNullOrEmpty(this.smtpPassword) || diff --git a/AsbCloudInfrastructure/Services/Email/WellFinalDocumentMailBodyFactory .cs b/AsbCloudInfrastructure/Services/Email/WellFinalDocumentMailBodyFactory .cs index 751ab042..814923fe 100644 --- a/AsbCloudInfrastructure/Services/Email/WellFinalDocumentMailBodyFactory .cs +++ b/AsbCloudInfrastructure/Services/Email/WellFinalDocumentMailBodyFactory .cs @@ -14,7 +14,7 @@ namespace AsbCloudInfrastructure public WellFinalDocumentMailBodyFactory(IConfiguration configuration) : base(configuration) { - platformName = configuration.GetValue("email:platformName", "Цифровое бурение"); + platformName = configuration.GetValue("email:platformName", "Цифровое бурение") ?? string.Empty; } public override string MakeSubject(WellDto well, string action) diff --git a/AsbCloudInfrastructure/Services/HelpPageService.cs b/AsbCloudInfrastructure/Services/HelpPageService.cs index 396ca595..45d4d18d 100644 --- a/AsbCloudInfrastructure/Services/HelpPageService.cs +++ b/AsbCloudInfrastructure/Services/HelpPageService.cs @@ -30,7 +30,7 @@ public class HelpPageService : IHelpPageService { this.helpPageRepository = helpPageRepository; this.fileStorageRepository = fileStorageRepository; - directoryNameHelpPageFiles = configuration.GetValue("DirectoryNameHelpPageFiles"); + directoryNameHelpPageFiles = configuration.GetValue("DirectoryNameHelpPageFiles") ?? string.Empty; if (string.IsNullOrWhiteSpace(directoryNameHelpPageFiles)) directoryNameHelpPageFiles = "helpPages"; diff --git a/AsbCloudInfrastructure/Services/ManualCatalogService.cs b/AsbCloudInfrastructure/Services/ManualCatalogService.cs index 8c779bc7..7776a4ef 100644 --- a/AsbCloudInfrastructure/Services/ManualCatalogService.cs +++ b/AsbCloudInfrastructure/Services/ManualCatalogService.cs @@ -35,7 +35,7 @@ public class ManualCatalogService : IManualCatalogService this.fileStorageRepository = fileStorageRepository; this.manualDirectoryRepository = manualDirectoryRepository; this.manualRepository = manualRepository; - directoryFiles = configuration.GetValue("DirectoryManualFiles"); + directoryFiles = configuration.GetValue("DirectoryManualFiles") ?? string.Empty; if (string.IsNullOrWhiteSpace(directoryFiles)) directoryFiles = "manuals"; diff --git a/AsbCloudInfrastructure/Services/MeasureService.cs b/AsbCloudInfrastructure/Services/MeasureService.cs index 7a349450..a291a8c1 100644 --- a/AsbCloudInfrastructure/Services/MeasureService.cs +++ b/AsbCloudInfrastructure/Services/MeasureService.cs @@ -38,7 +38,7 @@ namespace AsbCloudInfrastructure.Services .ToDictionaryAsync(e => e.Id, e => e.Name, token); return entities; }); - return cache; + return cache!; } public async Task GetLastOrDefaultAsync(int idWell, int idCategory, CancellationToken token) diff --git a/AsbCloudInfrastructure/Services/ReduceSamplingService.cs b/AsbCloudInfrastructure/Services/ReduceSamplingService.cs index b7581ad9..7fc7e19c 100644 --- a/AsbCloudInfrastructure/Services/ReduceSamplingService.cs +++ b/AsbCloudInfrastructure/Services/ReduceSamplingService.cs @@ -36,7 +36,7 @@ namespace AsbCloudInfrastructure.Services private ReduceSamplingService(IConfiguration configuration) { - connectionString = configuration.GetConnectionString("DefaultConnection"); + connectionString = configuration.GetConnectionString("DefaultConnection") ?? string.Empty; } ~ReduceSamplingService() diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs index 20b53c43..b9efeb11 100644 --- a/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs +++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryUserService.cs @@ -84,7 +84,7 @@ namespace AsbCloudInfrastructure.Services.SAUB var entities = db.Set().ToArray(); return entities; }); - return cache; + return cache!; } private void DropCache() diff --git a/AsbCloudWebApi.IntegrationTests/Clients/IDrillTestControllerClient.cs b/AsbCloudWebApi.IntegrationTests/Clients/IDrillTestControllerClient.cs index ba622557..fa1cd81e 100644 --- a/AsbCloudWebApi.IntegrationTests/Clients/IDrillTestControllerClient.cs +++ b/AsbCloudWebApi.IntegrationTests/Clients/IDrillTestControllerClient.cs @@ -21,7 +21,7 @@ public interface IDrillTestControllerClient int id, CancellationToken cancellationToken); - [HttpGet("/api/well/{idWell}/DrillTest/all")] + [Get("/api/well/{idWell}/DrillTest/all")] Task>> GetListAsync( int idWell, FileReportRequest request, diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/DetectedOperationControllerTests.cs b/AsbCloudWebApi.IntegrationTests/Controllers/DetectedOperationControllerTests.cs index 5f518884..7b8a08a9 100644 --- a/AsbCloudWebApi.IntegrationTests/Controllers/DetectedOperationControllerTests.cs +++ b/AsbCloudWebApi.IntegrationTests/Controllers/DetectedOperationControllerTests.cs @@ -55,7 +55,6 @@ public class DetectedOperationControllerTests : BaseIntegrationTest //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.NotNull(response.Content); Assert.Equal(1, response.Content); } @@ -76,7 +75,6 @@ public class DetectedOperationControllerTests : BaseIntegrationTest //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.NotNull(response.Content); Assert.Equal(1, response.Content); } @@ -112,7 +110,6 @@ public class DetectedOperationControllerTests : BaseIntegrationTest //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.NotNull(response.Content); Assert.Equal(1, response.Content); } diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs index 7de0acd5..07685f1e 100644 --- a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs +++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs @@ -77,7 +77,7 @@ public class ProcessMapReportDrillingControllerTest : BaseIntegrationTest //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(response.Content); - Assert.Equal(1, response.Content.Count()); + Assert.Single(response.Content); } [Fact] diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs index 117ddae1..bb4c54df 100644 --- a/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs +++ b/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs @@ -118,7 +118,7 @@ public class WellOperationControllerTest : BaseIntegrationTest var response = await client.GetPageOperationsAsync(well.Id, request); //assert - Assert.Equal(response.StatusCode, HttpStatusCode.OK); + Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(response.Content); var totalExpected = response.Content.Count - pageSize * pageIndex; @@ -230,10 +230,8 @@ public class WellOperationControllerTest : BaseIntegrationTest Assert.True(notExistedInDb.Count() == 0); } - [Theory] - [InlineData(WellOperation.IdOperationTypePlan)] - [InlineData(WellOperation.IdOperationTypeFact)] - public async Task GetPageOperationsAsyncWithDaysAndNpv_returns_success(int idType) + [Fact] + public async Task GetPageOperationsAsyncWithDaysAndNpv_returns_success() { //arrange const int pageSize = 10; diff --git a/AsbCloudWebApi.Tests/Background/BackgroundWorkerTest.cs b/AsbCloudWebApi.Tests/Background/BackgroundWorkerTest.cs index 912b4806..962ac43a 100644 --- a/AsbCloudWebApi.Tests/Background/BackgroundWorkerTest.cs +++ b/AsbCloudWebApi.Tests/Background/BackgroundWorkerTest.cs @@ -48,7 +48,7 @@ public class BackgroundWorkerTest backgroundWorker.Enqueue(work); } - await backgroundWorker.ExecuteTask; + await backgroundWorker.ExecuteTask!; //assert Assert.Equal(workCount, result); @@ -79,7 +79,7 @@ public class BackgroundWorkerTest backgroundWorker.Enqueue(badWork); backgroundWorker.Enqueue(goodWork); - await backgroundWorker.ExecuteTask; + await backgroundWorker.ExecuteTask!; //assert Assert.Equal(expectadResult, result); @@ -109,7 +109,7 @@ public class BackgroundWorkerTest var removed = backgroundWorker.TryRemoveFromQueue((workCount - 1).ToString()); - await backgroundWorker.ExecuteTask; + await backgroundWorker.ExecuteTask!; //assert Assert.True(removed); diff --git a/AsbCloudWebApi.Tests/Services/HelpPageServiceTest.cs b/AsbCloudWebApi.Tests/Services/HelpPageServiceTest.cs index e722fcb9..38fdf8bc 100644 --- a/AsbCloudWebApi.Tests/Services/HelpPageServiceTest.cs +++ b/AsbCloudWebApi.Tests/Services/HelpPageServiceTest.cs @@ -1,13 +1,13 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading; -using System.Threading.Tasks; using AsbCloudApp.Data; using AsbCloudApp.Repositories; using AsbCloudInfrastructure.Services; using Microsoft.Extensions.Configuration; using NSubstitute; +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using System.Threading.Tasks; using Xunit; namespace AsbCloudWebApi.Tests.Services; @@ -18,7 +18,7 @@ public class HelpPageServiceTest private const string fileName = "Справка_для_страницы_test.pdf"; private const int idCategory = 20000; - private static Dictionary configSettings = new() + private static Dictionary configSettings = new() { { "DirectoryNameHelpPageFiles", "helpPages" } }; diff --git a/AsbCloudWebApi.Tests/Services/Notification/EmailNotificationTransportServiceTests.cs b/AsbCloudWebApi.Tests/Services/Notification/EmailNotificationTransportServiceTests.cs index 5b6bcb1d..386de44d 100644 --- a/AsbCloudWebApi.Tests/Services/Notification/EmailNotificationTransportServiceTests.cs +++ b/AsbCloudWebApi.Tests/Services/Notification/EmailNotificationTransportServiceTests.cs @@ -43,7 +43,7 @@ namespace AsbCloudWebApi.Tests.Services.Notification Surname = "Test", }; - private static Dictionary configSettings = new() + private static Dictionary configSettings = new() { { "email:sender", "bot@digitaldrilling.ru" }, { "email:password", "8wZrXSfP" }, diff --git a/AsbCloudWebApi/Controllers/DrillerController.cs b/AsbCloudWebApi/Controllers/DrillerController.cs index 48efca2c..5e3ff126 100644 --- a/AsbCloudWebApi/Controllers/DrillerController.cs +++ b/AsbCloudWebApi/Controllers/DrillerController.cs @@ -46,9 +46,9 @@ namespace AsbCloudWebApi.Controllers var drillers = schedulePage .Select(s => s.Driller) .Where(d => d is not null) - .GroupBy(d => d.Id) + .GroupBy(d => d!.Id) .Select(group => group.First()) - .OrderBy(d => d.Surname); + .OrderBy(d => d!.Surname); return Ok(drillers); } diff --git a/AsbCloudWebApi/Extensions.cs b/AsbCloudWebApi/Extensions.cs index a19dcc6e..d805eac7 100644 --- a/AsbCloudWebApi/Extensions.cs +++ b/AsbCloudWebApi/Extensions.cs @@ -114,7 +114,7 @@ public static class Extensions /// /// Получение Excel /// - /// + /// /// /// public static Stream GetExcelFile(this IFormFile file)