.Net WebApi 与 swagger 不作为本地主机 Web 应用程序运行

问题描述 投票:0回答:1

我正在尝试仅使用 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
方法,但是当运行并打开浏览器时,本地主机未运行

我可能在这里遗漏了一些非常明显的东西,花了几个小时在这里搜索但没有任何运气

c# api rest asp.net-core .net-core
1个回答
0
投票

但是当这是从“docker-compose up”运行时,我不明白具体的 错误。

根据您共享的代码片段,您遇到了正确的异常。虽然您已添加

app.UseAuthorization()
,但是尚未遵循 中间件顺序。因此,它抛出了该错误。

为了正确注入中间件顺序,应在中间件管道中的

app.UseAuthorization()
之后调用
app.UseRouting()
这对于授权中间件在路由匹配后处理请求至关重要。

正确的顺序是:

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();

app.Run();

注意: 上述命令应该可以解决您的错误。另外,请参考这个官方文档。

© www.soinside.com 2019 - 2024. All rights reserved.