使用http.sys和Microsoft Edge的ASP.NET Core网站的问题

时间:2018-08-02 20:27:47

标签: asp.net-core microsoft-edge http.sys

在启动和运行ASP.NET Core 2.1 Web应用程序时遇到很多问题。我需要它在共享端口(80或443)上的http.sys(WebListener)下运行。我还希望它自动从http(80)重定向到https(443)。当然,我不想对http.sys的侦听器地址进行硬编码-我需要从配置文件中提取这些地址,但是现在它们已经被硬编码。我使用netsh保留了适当的URL,但是当我运行该应用程序时,我得到一个警告:

warn: Microsoft.AspNetCore.Server.HttpSys.MessagePump[0]
      Overriding address(es) 'http://sharedhost.vbcoa.com:80/app/, https://sharedhost.vbcoa.com:443/app/'. Binding to endpoints added to UrlPrefixes instead.

该应用程序启动,但是我根本无法使用Microsoft Edge浏览到该应用程序。任何其他Web浏览器都可以-只要我禁用HTTPS。由于某种原因,该应用程序将转发到端口5001,而不是443。

1 个答案:

答案 0 :(得分:3)

我想通了所有这些。有四个问题。我会分别给他们讲。

  • 配置http.sys时,会发出有关覆盖本地URL的警告

UseHttpSys的{​​{1}}扩展方法接受带有IWebHostBuilder属性的options参数。但是,即使您使用的是http.sys,也不应在此处配置URL。您可以使用UrlPrefixes的{​​{1}}扩展方法对它们进行硬编码,但是最好将其从配置中拉出,这会导致第二个问题:

  • 应从appsettings.json中读取配置

要指定要在其上运行应用程序的URL,请按如下所示将它们添加到UseUrls中的“ urls”元素中:

IWebHostBuilder

然后,您需要创建一个appsettings.json对象,向其中添加{ "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*", "urls": "http://sharedhost.vbcoa.com:80/app/;https://sharedhost.vbcoa.com:443/app/" } 文件,构建配置(使用ConfigurationBuilder方法),并告诉appsettings.json使用Build扩展方法使用该配置:

IWebHostBuilder
  • 重定向转到端口5001,而不是443

UseConfiguration的{​​{1}}方法中指定了HTTPS重定向-该功能是现成的。但是,默认情况下,即使您从上面的绑定URL中指定了另一个端口,它也将转发到端口5001。要覆盖它,您需要通过服务注入HTTPS重定向选项。这是在public static void Main(string[] args) { var configBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); var hostBuilder = WebHost.CreateDefaultBuilder(args) .UseConfiguration(configBuilder.Build()) .UseHttpSys() .UseStartup<Startup>(); hostBuilder.Build().Run(); } 的{​​{1}}方法中处理的。将以下行添加到该方法:

Configure
  • 即使其他所有浏览器都可以显示,Microsoft Edge也不会显示该Web应用程序

这是Windows Store应用程序中的本地主机回送隔离的问题。似乎会影响Windows 10企业版,如此处所述:Microsoft Edge is not able to recognize localhost。要更正它,您需要做两件事:

  1. 确保在Edge的“关于:标志”页面中选中“允许本地主机回送”。
  2. 以管理员身份启动命令提示符或Powershell提示符,然后输入以下内容:

    Startup

应该这样做!