У меня есть ASP .Net Core 2.2 Web API.В нем есть конечная точка, в которой интерфейс (приложение Angular) может отправлять файл в API, а API, в свою очередь, загружает этот файл в корзину Amazon S3 (регион us-east-1).
Это прекрасно работает во время отладки в Visual Studio, но при публикации на моем сервере (Windows Server 2016) я получаю следующее исключение:
Ошибка: возникло исключениепо цели вызова. в System.RuntimeMethodHandle.InvokeMethod (Object target, Object [] arguments, сигнатура сигнатуры, логический конструктор, Boolean wrapExceptions) в System.Reflection.RuntimeConstructorInfo.Invoke (BindingFlags invokeAttr, Binder, Binder[] параметры, культура CultureInfo)
в Amazon.Extensions.NETCore.Setup.ClientFactory.CreateClient (тип serviceInterfaceType, учетные данные AWSCredentials, конфигурация ClientConfig) в Amazon.Extensions.NETCore.Setup.ClientFactory.CreateSogineTyntInterInterInserviceClient, Опции AWSOptions) на Amazon.Extensions.NETCore.Setup.ClientFactory.CreateServiceClient (поставщик IServiceProvider) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory (сфера FactoryCallSite factoryCallSite, аргумент ServiceProviderEngineScope * 2.SiteCressSenseSignSpenSec.) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor (ConstructorCallSite constructorCallSite, ServiceProviderEngineScope) в Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine. <> c__DisplayClass1_0.b__0 (область действия ServiceProviderEngineScope) в Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService (тип serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
в Microsoft.Extensions.DependencyInjection.epenServiceServiceServiceServiceActivatorUtilities.GetService (IServiceProvider sp, тип Type, Type requiredBy, логическое значение isDefaultParameterRequired)
в lambda_method (закрытие, IServiceProvider, Object []) в Microsoft.AspNetCore.Mvc.Controllers.ControllerAclassator_ider.ider0.b__0 (ControllerContext controllerContext) в Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider. <> c__DisplayClass5_0.g__CreateController | 0 (ControllerContext controllerContext) в Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next (Состояние и следующее, Область и область действия, Объект и состояние, Логическое значение и isCompleted) в Microsoft.AspNetCore.Mvc.Internal.ControlilAinInInCoreInInInInIn..Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter () в Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow (контекст ResourceExecutedContext) в Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next (область видимости и следующего объекта, область видимости и объекта, область видимости и состояния, область видимости и объекта, область видимости и состояния, область видимости и состояния объекта)) в Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync () в Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync ()
в Microsoft.AspNetCore.Routing.EndpointMiddleware.InteCateContext ().Routing.EndpointRoutingMiddleware.Invoke (HttpContext httpContext) в PropWorx.API.Middlewares.TenantIdentifier.Invoke (HttpContext httpContext, SharedContext sharedConte)xt) в C: \ Users \ fabsr \ source \ repos \ PropWorx.API \ PropWorx.API \ Middlewares \ TenantIdentifier.cs: строка 73 в Microsoft.AspNetCore.Builder.Extensions.MapWhenMiddleware.Invoke (HttpContext)контекста) в Microsoft.AspNetCore.Builder.Extensions.MapWhenMiddleware.Invoke (контекст HttpContext) в Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke (контекст HttpContext) в Swashbuckle.AspNetCore.SwaggerPackTeteTecteke.teke ().Swagger.SwaggerMiddleware.Invoke (HttpContext httpContext, ISwaggerProvider swaggerProvider) в Microsoft.AspNetCore.Authentication.Я создал файл «credentials» в папке% UserProfile% .aws.
Я добавил в проект следующие два пакета NuGet:
- AWSSDK.Extensions.NETCore.Setup
- AWSSDK.S3
У меня есть это в моем Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddAWSService<IAmazonS3>();
services.AddSingleton<IS3Service, S3Service>();
}
S3Service.cs выглядит так:
public class S3Service : IS3Service
{
private readonly IAmazonS3 _client;
public S3Service(IAmazonS3 client)
{
_client = client;
}
// Some methods to upload and delete objects... not important
}
Я внедряю эту услугу на один из моих контроллеров:
public class FilesController : ControllerBase
{
private readonly IS3Service _s3Service;
public FilesController(IS3Service s3Service)
{
_s3Service = s3Service;
}
// Some actions to receive the file... not important
}
Ошибка hпоявляется как только я вызываю какие-либо действия в этом контроллереФактически, ошибка, кажется, происходит, когда S3Service вводится в конструктор контроллера.Если я удаляю инъекцию конструктора, то есть:
public class FilesController : ControllerBase
{
private readonly IS3Service _s3Service;
public FilesController()
{
}
// Some actions to receive the file... not important
}
Ошибка исчезает (но, конечно, не работает должным образом)
Есть идеи?Как я уже сказал, это отлично работает на моем ноутбуке при отладке в VS2017.Но это не работает при публикации на сервер.Все остальные контроллеры в API работают нормально.Кажется, это проблема в момент внедрения S3Service в конструктор ...