基础连接已关闭。无法使用HTTP.sys运行Asp.Net Core 2.1 Web API应用程序?

时间:2018-07-13 21:00:15

标签: c# asp.net asp.net-core .net-core

我创建了一个新的Asp.net core 2.1 Web应用程序,然后选择“ API”模板。 (我将身份验证更改为“ Windows”。然后添加了以下代码,以将Http.Sys用于Windows身份验证。(https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-2.1&tabs=aspnetcore2x

using Microsoft.AspNetCore.Server.HttpSys; // Added

    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            // Added
            .UseHttpSys(o => 
            {
                o.Authentication.Schemes = AuthenticationSchemes.NTLM | 
                                           AuthenticationSchemes.Negotiate;
                o.Authentication.AllowAnonymous = false;
            });

以下消息显示了运行应用程序时的输出消息。

info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using 'C:\Users\...\AppData\Local\ASP.NET\Da
taProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
info: Microsoft.AspNetCore.Server.HttpSys.HttpSysListener[0]
      Start
info: Microsoft.AspNetCore.Server.HttpSys.HttpSysListener[0]
      Listening on prefix: https://localhost:5001/
info: Microsoft.AspNetCore.Server.HttpSys.HttpSysListener[0]
      Listening on prefix: http://localhost:5000/
Hosting environment: Development
Content root path: C:\work\WebApplication1
Now listening on: https://localhost:5001
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

但是,访问https://localhost:5001/api/values时,浏览器会显示错误消息“无法访问此站点(连接已重置)”? enter image description here

经过powershell测试

PS C:\work> Invoke-WebRequest https://localhost:5001/api/values
Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send.
At line:1 char:1
+ Invoke-WebRequest https://localhost:5001/api/values
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

PS C:\work> Invoke-WebRequest http://localhost:5000/api/values
Invoke-WebRequest : The remote server returned an error: (401) Unauthorized.
At line:1 char:1
+ Invoke-WebRequest http://localhost:5000/api/values
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

Fiddler返回以下消息。

  

fiddler.network.https>与本地主机(对于#3)的HTTPS握手失败。 System.IO.IOException无法从传输连接中读取数据:现有连接被远程主机强行关闭。 <现有连接被远程主机强行关闭

Internet Explorer返回以下消息。

  

在“高级”设置中打开TLS 1.0,TLS 1.1和TLS 1.2,然后尝试再次连接到https://localhost:5001。如果此错误仍然存​​在,则可能是该站点使用了不受支持的协议或密码套件,例如RC4(有关详细信息的链接),认为不安全。请与您的站点管理员联系。

3 个答案:

答案 0 :(得分:1)

您需要在ACL中添加/安装自签名证书,并且需要在本地的“受信任的根证书颁发机构”中添加。

您可以评论app.UseHttpsRedirection(); 在launchSettings.json中,您需要具有以下内容:

"applicationUrl": "http://localhost:5000",

"iisExpress": {
  "applicationUrl": "http://localhost:49845",
  "sslPort": 0 //44382

答案 1 :(得分:0)

我有以下代码,它对我有用。在配置服务中,我有

 services.AddAuthentication(Microsoft.AspNetCore.Server.HttpSys.HttpSysDefaults.AuthenticationScheme);

并在program.cs

.UseStartup<Startup>()
            .UseKestrel()
            .UseHttpSys(options =>
            {
                options.Authentication.Schemes = AuthenticationSchemes.NTLM;
                options.Authentication.AllowAnonymous = false;
                options.MaxConnections = 1000;
            })
            .UseIISIntegration()

答案 2 :(得分:0)

对我来说,我必须注释掉Startup类的Configure(..)方法中的app.UseHttpsRedirection()行,并使用http://localhost:5000

            // app.UseHttpsRedirection();

我想如果我想使用https,我必须遵循@Bhavik Patel的建议并安装一个自签名证书。