IISExpress-获取网站以标识其自己的SSL端口绑定

时间:2019-02-28 13:14:05

标签: asp.net .net iis-express

好的,所以现在了解一下环境配置:

  • 使用VS2017
  • IISExpress文件夹与applicationhost.config文件一起存在于我的文档文件夹中

当我在VS2017中运行Web项目时,它通过IISExpress成功运行。如果查看IISExpress配置窗口,则表明我的应用程序运行成功,并且正在使用source \ repos文件夹中的配置,而不是文档中的主要IISExpress文件夹。如果我查看IISExpress文件夹中的配置文件,则没有提及我当前正在运行的应用程序的绑定(这很有意义,因为它显然使用了其他配置文件)。

enter image description here

但是,在我的应用程序中,我需要能够使用Microsoft.Web.Administration工具集尝试为当前站点标识绑定到https的端口,以处理对必须安全的页面的重定向。在生产环境中,这只是通过推送到https://来处理,因为我们知道将存在SSL证书。但是,在本地调试时,我需要切换到SSL并获取端口号,否则出于明显的原因,重定向失败。

Using _Manager_ServerManager As New ServerManager
    For Each _Loop_Binding As Binding In _Manager_ServerManager.Sites(System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName()).Bindings
        If (_Loop_Binding.IsIPPortHostBinding) AndAlso (_Loop_Binding.Protocol.ToLower() = "https") Then Return _Loop_Binding.EndPoint.Port
    Next
End Using

上面的代码在运行时会导致错误,因为_Manager_ServerManager.Sites中不存在当前站点。如果检查此属性,则只能看到从文档的IISExpress文件夹(而不是当前站点)中获取的配置文件中配置的应用程序!

我真的很想抓这个,可以通过编程方式获取当前正在运行的网站的信息吗?!

编辑 根据下面的一些评论,对于我实际上想要实现的目标,已经要求更加清晰。该网站通常使用标准HTTP进行操作,但是,出于安全原因进入一个特定页面时,我们需要切换到HTTPS:

Response.Redirect(“ https://”&Request.Url.DnsSafeHost&“ /my-page.aspx”)

使用IISExpress在本地调试此网站时,这将导致您重定向到https://localhost/my-page.aspx,这是不正确的,因为该网站运行在本地主机的端口(即http://localhost:64905https://localhost:64906 )。这意味着我不能仅将Request.Url.Port追加到DnsSafeHost的末尾,因为它将不是必需的HTTPS端口。因此,为了使我们可以在开发机器上本地运行该项目,我们需要自动将端口切换为HTTPS版本,以便我们可以无缝地继续运行而不会受到任何干扰,并且每次重定向时都必须手动重建URL。

0 个答案:

没有答案