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

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

我目前正在开发一个项目,其中有一个共享 GRPC 库,其中包含客户端和服务器的原型文件。然后,该库将包含在主 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 页面应该可以毫无问题地加载。

c# .net asp.net-core swagger grpc
1个回答
0
投票

尝试多种解决方案后发现GRPC服务名和Swagger可能存在冲突。在这种情况下,将 GRPC 服务名称从“Controller”更改为其他名称(例如“Actuator”)即可解决问题。

例如,如果您的 GRPC 服务最初名为 PublishController,请尝试将其重命名为 PublishActuator。此更改不应影响 GRPC 服务的功能,但可以防止在某些情况下与 Swagger 发生冲突。

进行此更改后,重新生成 GRPC 文件并尝试再次访问 Swagger UI。这个简单的调整解决了我项目中的 Swagger 文档加载问题。

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