我目前正在做一个项目,我有一个共享的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页面应该没有任何问题加载。
1条答案
按热度按时间iqih9akk1#
在尝试了多种解决方案后,发现GRPC服务名称和Swagger之间可能存在冲突。在这种情况下,将GRPC服务名称从“Controller”更改为其他名称,如“Actuator”,解决了该问题。
例如,如果您的GRPC服务最初命名为PublishController,请尝试将其重命名为PublishActuator。此更改不应影响GRPC服务的功能,但可以防止在某些情况下与Swagger发生冲突。
在做了这个修改之后,重新生成你的GRPC文件并再次尝试访问Swagger UI。这个简单的调整解决了我的项目中的Swagger文档加载问题。