我正在尝试仅使用 CLI 创建 .NET Core (8) REST API 并让
program.cs
显示如下
当我从 VS 2022 运行此程序时,没有出现编译器或运行时错误。
但是当从“docker-compose up”运行时,我没有得到特定的错误
2024-03-28 17:54:11 Unhandled exception. System.InvalidOperationException: Unable to find the required services. Please add all the required services by calling 'IServiceCollection.AddAuthorization' in the application startup code.
2024-03-28 17:54:11 at Microsoft.AspNetCore.Builder.AuthorizationAppBuilderExtensions.VerifyServicesRegistered(IApplicationBuilder app)
2024-03-28 17:54:11 at Microsoft.AspNetCore.Builder.AuthorizationAppBuilderExtensions.UseAuthorization(IApplicationBuilder app)
2024-03-28 17:54:11 at WebApi.Program.Main(String[] args) in /app/Program.cs:line 41
using Microsoft.EntityFrameworkCore;
namespace WebApi
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
services.AddEndpointsApiExplorer();
services.AddSwaggerGen();
services.AddControllers();
/*
Console.WriteLine("Preparing DbContext");
services.AddDbContext<ParkingDbContext>(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
*/
services.AddAuthorization(); // Move AddAuthorization here
services.AddHealthChecks();
var app = builder.Build();
app.UseAuthorization();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI();
}
// Configure the HTTP request pipeline.
app.UseRouting();
app.MapControllers();
app.Run();
}
}
}
正如您所注意到的,我确实有上面的
.AddAuthorization
方法,但是当运行并打开浏览器时,本地主机未运行
我可能在这里遗漏了一些非常明显的东西,花了几个小时在这里搜索但没有任何运气
但是当这是从“docker-compose up”运行时,我不明白具体的 错误。
根据您共享的代码片段,您遇到了正确的异常。虽然您已添加
app.UseAuthorization()
,但是尚未遵循 中间件顺序。因此,它抛出了该错误。
为了正确注入中间件顺序,应在中间件管道中的
app.UseAuthorization()
之后调用 app.UseRouting()
。 这对于授权中间件在路由匹配后处理请求至关重要。
正确的顺序是:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
注意: 上述命令应该可以解决您的错误。另外,请参考这个官方文档。