【发布时间】:2020-10-20 09:53:34
【问题描述】:
当我尝试运行我的 ASP.NET Core 应用程序时抛出了这个异常:
System.InvalidOperationException:找不到所需的服务。请通过在应用程序启动代码中对“ConfigureServices(...)”的调用中调用“IServiceCollection.AddAuthorization”来添加所有必需的服务。
在 Microsoft.AspNetCore.Builder.AuthorizationAppBuilderExtensions.VerifyServicesRegistered(IApplicationBuilder 应用程序)
在 Microsoft.AspNetCore.Builder.AuthorizationAppBuilderExtensions.UseAuthorization(IApplicationBuilder 应用程序) 在 /Users/fathindosunmu/OneDrive/MyProjects/GitHubProjects/Reactivities/Reactivities/WebAPI/Startup.cs:line 164 中的 API.Startup.Configure(IApplicationBuilder 应用程序,IWebHostEnvironment env) 在 System.RuntimeMethodHandle.InvokeMethod(对象目标,对象 [] 参数,签名 sig,布尔构造函数,布尔 wrapExceptions) 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object[] 参数,CultureInfo 文化) 在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(对象实例,IApplicationBuilder 构建器) 在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.c__DisplayClass4_0.b__0(IApplicationBuilder 生成器) 在 Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.c__DisplayClass13_0.b__2(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.HostFilteringStartupFilter.c__DisplayClass0_0.b__0(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancelToken) 未处理的异常。 System.InvalidOperationException:找不到所需的服务。请通过在应用程序启动代码中对“ConfigureServices(...)”的调用中调用“IServiceCollection.AddAuthorization”来添加所有必需的服务。 在 Microsoft.AspNetCore.Builder.AuthorizationAppBuilderExtensions.VerifyServicesRegistered(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.Builder.AuthorizationAppBuilderExtensions.UseAuthorization(IApplicationBuilder 应用程序) 在 /Users/fathindosunmu/OneDrive/MyProjects/GitHubProjects/Reactivities/Reactivities/WebAPI/Startup.cs:line 164 中的 API.Startup.Configure(IApplicationBuilder 应用程序,IWebHostEnvironment env) 在 System.RuntimeMethodHandle.InvokeMethod(对象目标,对象 [] 参数,签名 sig,布尔构造函数,布尔 wrapExceptions) 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object[] 参数,CultureInfo 文化) 在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(对象实例,IApplicationBuilder 构建器) 在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.c__DisplayClass4_0.b__0(IApplicationBuilder 生成器) 在 Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.c__DisplayClass13_0.b__2(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.HostFilteringStartupFilter.c__DisplayClass0_0.b__0(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancelToken) 在 Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancelToken) 在 Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost 主机,CancellationToken 令牌) 在 Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost 主机,CancellationToken 令牌) 在 Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost 主机) 在 API.Program.Main(String[] args) 在 /Users/fathindosunmu/OneDrive/MyProjects/GitHubProjects/Reactivities/Reactivities/WebAPI/Program.cs:line 16
即使我已经在configureServices 方法中注册了所有必需的服务(参见下面的注册)。如果显式调用AddAuthorization,为什么会抛出这个异常?
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options =>
{
options.UseLazyLoadingProxies();
options.UseSqlServer(
Configuration.GetConnectionString("MsSqlConnection"));
});
services.AddCors(options =>
{
options.AddPolicy("CorsAllowAll",
builder =>
{
builder.WithOrigins("http://localhost:3000");
builder.WithExposedHeaders("WWW-Authenticate");
builder.AllowAnyHeader();
builder.AllowAnyMethod();
builder.AllowCredentials();
});
});
services.AddMediatR(typeof(List.Handler).Assembly);
services.AddAutoMapper(typeof(List.Handler));
services.AddSignalR();
var builder = services.AddIdentityCore<AppUser>();
var identityBuilder = new IdentityBuilder(builder.UserType, builder.Services);
identityBuilder.AddEntityFrameworkStores<AppDbContext>();
identityBuilder.AddSignInManager<SignInManager<AppUser>>();
services.AddAuthorization(options =>
{
options.AddPolicy("IsActivityHost", policy =>
{
policy.Requirements.Add(new IsHostRequirement());
});
});
services.AddTransient<IAuthorizationHandler, IsHostRequirementHandler>();
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWT:SigningKey"]));
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).
AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = key,
ValidateAudience = false,
ValidateIssuer = false,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
//receiving jwt token as a request header from client because the chatHub is not a HTTP request
//Protocol
var accessToken = context.Request.Query["access_token"];
var path = context.HttpContext.Request.Path;
if (!string.IsNullOrEmpty(accessToken) && (path.StartsWithSegments("/chat")))
{
context.Token = accessToken;
}
return Task.CompletedTask;
}
};
});
services.AddControllers(options =>
{
var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
options.Filters.Add(new AuthorizeFilter(policy));
}).AddFluentValidation(config =>
config.RegisterValidatorsFromAssemblyContaining<Create>());
services.AddScoped<IJWTGenerator, JWTGenerator>();
services.AddScoped<IUserAccessor, UserAccessor>();
services.AddScoped<IPhotoAccessor, PhotoAccessor>();
services.AddScoped<IProfileReader, ProfileReader>();
services.Configure<CloudinarySettings>(Configuration.GetSection("Cloudinary"));
}
我到处寻找可能是什么问题的提示,但找不到解决方案。
【问题讨论】:
-
您是否尝试过在没有授权的情况下在本地运行您的应用程序?
-
我仍然会抛出讨厌的异常@PeterCsala
-
在这种情况下,它仍然指的是
AddAuthorization吗? -
请编辑您的问题并使用您正在使用的相关版本的 ASP.NET Core 添加标签。
标签: c# asp.net-web-api asp.net-core-3.1