DOT Net Core 3.0を使用しています。
GRPCアプリがあります。 GRPCプロトコルを通じて通信することができます。
私は私の次のステップがいくつかのRESTFUL APIサポートを追加すると思いました。ブラウザを使用してAPIに移動しようとすると、どのプロトコル(HTTP/HTTPS)とポートを使用しても、エラー "err_invalid_http_response"を取得します。 GRPCは8001を使用して5001とWebAPIを使用する必要があります。
私のスタートアップクラスを対象
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseRouting();
app.UseHttpsRedirection();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<BootNodeService>();
endpoints.MapControllers();
});
}
}
_
そして私のコントローラー:
[ApiController]
[Route("[controller]")]
public class AdminController : ControllerBase
{
[HttpGet] public string Get()
{ return "hello"; }
}
_
何かご意見は?
Thx
〜#〜]編集[〜#〜]:プロジェクト全体が このレポ で見つけることができます。
私は解決策を見つけました。私はMacOS上で実行されているとKestrelを使っていたと言及していませんでした(そしてそれはMacOSとKestrelの組み合わせが問題です)。その欠けている情報をお詫び申し上げます。
解決策は、 ここ と似ています。 WebAPIポートにoptions.ListenLocalhost
への呼び出しを追加する必要がありました。
これがコードです:
public class Program
{
public static void Main(string[] args)
{
IHostBuilder hostBuilder = CreateHostBuilder(args);
IHost Host = hostBuilder.Build();
Host.Run();
}
// Additional configuration is required to successfully run gRPC on macOS.
// For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.Microsoft.com/fwlink/?linkid=2099682
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel(options =>
{
options.ListenLocalhost(5001, o => o.Protocols =
HttpProtocols.Http2);
// ADDED THIS LINE to fix the problem
options.ListenLocalhost(11837, o => o.Protocols =
HttpProtocols.Http1);
});
webBuilder.UseStartup<Startup>();
});
}
}
Thx