IISExpress - Получить сайт, чтобы определить свою собственную привязку порта SSL - PullRequest
0 голосов
/ 28 февраля 2019

ОК, поэтому немного предыстории о конфигурации среды:

  • Использование VS2017
  • Папка IISExpress присутствует в моей папке документов с файлом applicationhost.config

Когда я запускаю свой веб-проект в VS2017, он успешно выполняется через 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,, что неверно, поскольку сайт работает на порте localhost (т. е. * 1034).*http://localhost:64905 и https://localhost:64906). Это означает, что я не могу просто добавить Request.Url.Port в конец DnsSafeHost, потому что это не будет порт HTTPS, требуемый. Таким образом, чтобы мы могли запустить этот проект локально наНа наших разработчиках нам нужно автоматически переключить порт на версию HTTPS, чтобы мы могли беспрепятственно продолжать работу без каких-либо помех и необходимости вручную перестраивать URL-адрес каждый раз, когда мы перенаправляемся.

...