【问题标题】:self hosted ASP.NET core Web API with Kestrel using HTTPS使用 HTTPS 的 Kestrel 自托管 ASP.NET 核心 Web API
【发布时间】:2022-12-22 05:52:10
【问题描述】:

我正在尝试使用 CoreWCF 包将旧的 WCF 服务转换为 ASP.NET Core Web API。这个现有服务的一个关键特性是它由其他应用程序自行托管,并且能够通过用户在 WPF UI 上完成的按钮按下来优雅地启动和停止。

应该通过 HTTPS 端点访问此服务,这就是我苦苦挣扎的地方。我已经能够使用常规 HTTP 成功访问 API,但我猜我遗漏了什么或者它与我的证书有关。我已经尝试通过传递 listeningOption.UseHTTPS() 使用默认证书,但是当我转到 URL 时,它会返回错误 500。我还尝试了一个自签名证书并将其传递到上述方法中,但是它不断返回相同的错误。

配置一切的代码如下所示:

配置虚拟主机:

private void CreateWebHostBuilder(){
    host = WebHost.CreateDefaultBuilder()
        .UseKestrel(options =>
        {
            options.AllowSynchronousIO = true;
            options.ListenLocalhost(Startup.PORT_NR, 
                lOptions => lOptions.UseHttps("{absolute path}", "{password}"));
            );
        })
        .ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); })
        .UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
        .UseShutdownTimeout(TimeSpan.FromSeconds(1))
        .UseStartup<Startup>()
        .Build();
}

Startup 类中:

配置IApplicationBuilder

public void Configure(IApplicationBuilder app){
    app.UseServiceModel(builder =>
    {
        // Add the Echo Service
        builder.AddService<EchoService>()                
        // Add service web endpoint                
        .AddServiceWebEndpoint<EchoService, IEchoService>(
            WEB_API_PATH,behavior => { behavior.HelpEnabled = true;}
        );
     });            
     app.UseMiddleware<SwaggerMiddleware>();            
     app.UseSwaggerUI();
     app.UseAuthentication();
     app.UseHttpsRedirection();
}

配置服务:

public void ConfigureServices(IServiceCollection services){
    services.AddServiceModelWebServices()                
            .AddHostedService<EchoService>()                       
            .AddSingleton(new SwaggerOptions())                  
            .AddAuthentication(CertificateAuthenticationDefaults.AuthenticationScheme)
            .AddCertificate(); 
    services.AddHttpsRedirection(options =>
            {
                options.HttpsPort = HTTPS_PORT_NR;
            });           
}

由于这是作为 WPF 应用程序开始的,所以我没有要添加的 appsettings.json 文件,如果需要的话,我真的不知道要在其中添加什么。

因此,如果有人有任何建议或教程参考,请务必告诉我,欢迎任何帮助。

【问题讨论】:

    标签: asp.net-core https asp.net-core-webapi kestrel-http-server


    【解决方案1】:

    所以我最终弄清楚了缺少的东西。我只需要添加另一个端点,它会像这样监听 https 请求:

    public void Configure(IApplicationBuilder app){
        app.UseServiceModel(builder =>
        {
            // Add the Echo Service
            builder.AddService<EchoService>()                
            // Add service web endpoint                
            .AddServiceWebEndpoint<EchoService, IEchoService>(
                WEB_API_PATH,behavior => { behavior.HelpEnabled = true;}
            );
            .AddServiceWebEndpoint<EchoService, IEchoService>(new WebHttpBinding
            {
                Security = new WebHttpSecurity { Mode = WebHttpSecurityMode.Transport },
                WEB_API_PATH,behavior => { behavior.HelpEnabled = true;}
            );
         });
         // remainder of code.
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-31
      • 2019-06-17
      • 1970-01-01
      • 2020-01-25
      • 2015-01-09
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      相关资源
      最近更新 更多