好的,所以现在了解一下环境配置:
当我在VS2017中运行Web项目时,它通过IISExpress成功运行。如果查看IISExpress配置窗口,则表明我的应用程序运行成功,并且正在使用source \ repos文件夹中的配置,而不是文档中的主要IISExpress文件夹。如果我查看IISExpress文件夹中的配置文件,则没有提及我当前正在运行的应用程序的绑定(这很有意义,因为它显然使用了其他配置文件)。
但是,在我的应用程序中,我需要能够使用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:64905和https://localhost:64906 )。这意味着我不能仅将Request.Url.Port追加到DnsSafeHost的末尾,因为它将不是必需的HTTPS端口。因此,为了使我们可以在开发机器上本地运行该项目,我们需要自动将端口切换为HTTPS版本,以便我们可以无缝地继续运行而不会受到任何干扰,并且每次重定向时都必须手动重建URL。