使用GRPC服务时,Swagger未加载到ASP.NET Core WebAPI应用程序中

qcbq4gxm  于 5个月前  发布在  .NET
关注(0)|答案(1)|浏览(50)

我目前正在做一个项目,我有一个共享的GRPC库,其中包含客户端和服务器的proto文件。该库然后包含在一个主要的ASP.NET Core WebAPI项目中。GRPC功能按预期工作,但我面临一个问题,Swagger文档无法加载。
在WebAPIProject中,我添加了对GRPCLibrary的引用,并在Startup.cs中包含了必要的服务:

// Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // ... other configurations

    services.AddGrpc();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAPIProject", Version = "v1" });
    });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ... other configurations

    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPIProject v1");
    });

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGrpcService<GreeterService>();
        endpoints.MapControllers();
    });
}

字符串
尽管有这些配置,当我导航到Swagger UI(/swagger/index.html)时,我无法看到文档。似乎GRPC相关组件正在干扰Swagger。在ASP.NET Core WebAPI项目中将GRPC与Swagger文档结合时,是否有人遇到过类似的问题?任何关于如何解决这个问题的见解或建议都将非常感谢。
Swagger页面应该没有任何问题加载。

iqih9akk

iqih9akk1#

在尝试了多种解决方案后,发现GRPC服务名称和Swagger之间可能存在冲突。在这种情况下,将GRPC服务名称从“Controller”更改为其他名称,如“Actuator”,解决了该问题。
例如,如果您的GRPC服务最初命名为PublishController,请尝试将其重命名为PublishActuator。此更改不应影响GRPC服务的功能,但可以防止在某些情况下与Swagger发生冲突。
在做了这个修改之后,重新生成你的GRPC文件并再次尝试访问Swagger UI。这个简单的调整解决了我的项目中的Swagger文档加载问题。

相关问题