You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 7中gRPC集成Swagger失败,报HTTP版本不兼容错误

问题解决:Swagger访问报错“An HTTP/1.x request was sent to an HTTP/2 only endpoint.”

原因分析

gRPC服务默认依赖HTTP/2协议,但Swagger UI及gRPC JSON转码接口使用HTTP/1.1协议请求。若项目的Kestrel服务器仅配置为支持HTTP/2,就会触发协议冲突错误。

解决方案

1. 配置Kestrel同时支持HTTP/1.1和HTTP/2

在Program.cs的WebApplication.CreateBuilder阶段,添加Kestrel双协议支持配置:

builder.WebHost.ConfigureKestrel(options =>
{
    // 配置HTTP端口支持双协议
    options.ListenAnyIP(5000, o => o.Protocols = HttpProtocols.Http1AndHttp2);
    // 若使用HTTPS,同步配置双协议
    options.ListenAnyIP(5001, o =>
    {
        o.Protocols = HttpProtocols.Http1AndHttp2;
        o.UseHttps();
    });
});

2. 调整中间件顺序

确保Swagger相关中间件在路由配置前启用,认证授权中间件按需添加:

var app = builder.Build();

// 启用Swagger
app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});

// 启用路由
app.UseRouting();

// 启用认证与授权(项目有相关逻辑时添加)
app.UseAuthentication();
app.UseAuthorization();

// 映射gRPC服务,同时支持gRPC原生请求与HTTP转码请求
app.UseEndpoints(endpoints =>
{
    endpoints.MapGrpcService<GreeterService>();
});

app.MapGet("/", () => "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");

app.Run();

3. 确认gRPC与Swagger集成服务注册

检查项目中已正确添加以下服务注册(你的代码已包含,可验证版本兼容性):

builder.Services.AddGrpcHttpApi();
builder.Services.AddGrpcSwagger();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "gRPC Server", Version = "v1" });
    var filePath = Path.Combine(System.AppContext.BaseDirectory, "gRPCserver.xml");
    c.IncludeXmlComments(filePath);
    c.IncludeGrpcXmlComments(filePath, includeControllerXmlComments: true);
});

4. 检查启动配置

在launchSettings.json中,确保应用启动URL使用兼容HTTP/1.1的端口,未强制指定仅使用HTTP/2。

验证

重启项目后,访问/swagger/index.html即可正常加载Swagger文档,同时gRPC服务仍可通过HTTP/2正常运行。

内容的提问来源于stack exchange,提问作者Bechara Madi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:25:20