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