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

如何在ASP.NET Core 6同一端口同时运行REST API与gRPC

在ASP.NET Core 6中让gRPC与REST API共用同一端口的解决方案

问题根源

你之前把Kestrel端点默认协议设为Http2,导致端口仅支持HTTP/2请求——而REST API通常基于HTTP/1.1通信,自然无法正常响应;移除配置后端口默认仅支持HTTP/1.1,又满足不了gRPC对HTTP/2的依赖,所以才会出现两者不能同时工作的情况。核心解决思路是让同一端口同时兼容HTTP/1.1和HTTP/2两种协议。

具体配置步骤

  1. 修改appsettings.json配置
    将Kestrel的默认协议改为Http1AndHttp2,让端口同时处理两种协议的请求:

    {
      "urls": "http://localhost:5000",
      "Kestrel": {
        "EndpointDefaults": {
          "Protocols": "Http1AndHttp2"
        }
      }
    }
    
  2. 确保Program.cs中服务与中间件配置正确
    需要同时注册gRPC和REST相关服务,并正确映射端点:

    var builder = WebApplication.CreateBuilder(args);
    
    // 注册gRPC服务
    builder.Services.AddGrpc();
    // 注册REST控制器服务(如果用Controller编写API)
    builder.Services.AddControllers();
    
    var app = builder.Build();
    
    app.UseRouting();
    
    app.UseEndpoints(endpoints =>
    {
        // 映射你的gRPC实现类
        endpoints.MapGrpcService<YourGrpcServiceImpl>();
        // 映射REST控制器路由
        endpoints.MapControllers();
    });
    
    app.Run();
    

补充说明

  • 如果使用HTTPS(生产环境推荐),Kestrel会通过ALPN协议协商自动支持HTTP/1.1和HTTP/2,不需要额外设置Protocols。
  • 若gRPC客户端连接HTTP端口时出现异常,需确认客户端允许使用不加密的HTTP/2(部分客户端默认仅支持HTTPS环境下的HTTP/2)。

内容的提问来源于stack exchange,提问作者Hadi Samadzad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:17:18