簡體   English   中英

在另一個 controller 中使用當前的 UserManager

[英]Use the current UserManager in another controller

您好,我有 2 個控制器:

  • 應用用戶控制器
  • 應用產品控制器

如何使用ApplicationUserController _userManager 僅允許ApplicationProductController內的[Authorize]請求。 每次我嘗試將新產品注冊為授權用戶時,都會收到此錯誤:

System.InvalidOperationException: Unable to resolve service for type 'MyAPI.Controllers.ApplicationUserController' while attempting to activate 'MyAPI.Controllers.ApplicationProductController'. at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired) at lambda_method(Closure, IServiceProvider, Object[] ) at Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.<>c__DisplayClass4_0.<CreateActivator>b__0(ControllerContext controllerContext) at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass5_0.<CreateControllerFactory>g__CreateController|0(ControllerContext controllerContext) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() --- End of stack trace from previous location where exception was thrown --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() --- End of stack trace from previous location where exception was thrown --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at AspNetCoreRateLimit.RateLimitMiddleware 1.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

確保您的Controller class 上方有[Authorize]屬性,以使用戶被授權訪問 controller 和方法,否則將他們重定向到登錄頁面。

我認為您正在嘗試在另一個 controller (ApplicationProductController)中inject controller (ApplicationUserController)。 錯了,從構造函數中刪除參數。

您不必將UserManager注入 controller 以確保用戶有權訪問 controller。

之所以會出現此錯誤,是因為您試圖將某些東西注入未在Dependency Injection中注冊的 controller 中。 請檢查ApplicationUserController的構造函數,並確保所有參數都在項目根目錄的Startup.cs文件中的 DI 中注冊。

通過檢查ApplicationUserController構造函數和ApplicationProductController構造函數之間的差異,您可以更輕松地找到錯誤原因。

希望這對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM