У меня есть форма на странице, которая публикует сообщения во внешнем приложении, и мне нужно отправить URL-адрес в этом сообщении. Однако для НЕКОТОРЫХ пользователей URL-адрес https://localhost/Home/MyAction, а не https://mysubdomain.domain.com/Home/Action. Я не смог воспроизвести это, но два коллеги постоянно получают это в той же сети, что и я.
<form action="https://externalapp.com/action.cgi" method="POST">
...
<input type="hidden" name="URL" value="@Url.Action("MyAction", "Home", null, "https")"/>
<input type="submit" value="Submit" />
</form>
Я пробовал:
- Url.Action («MyAction», «Home», null, «https»)
- Url.Action («MyAction», «Home», null, «https», Request.Url.Host) // Это то, во что верит MVC, если вы не укажете хост
- Url.Action («MyAction», «Home», null, «https», Request.Url.Authority)
- Url.Action ("MyAction", "Home", null, "https", Request.Headers ["host"]) // Если вы используете нестандартный порт, этот порт будет дважды указан в URL ( например, https://mysubdomain.domain.com:4430/Home/Action.
Почему некоторые пользователи вообще видят localhost с этим? Никто из пользователей не обращается к этому приложению с сервера, на котором оно размещено.
Обновление: Внутренне доступ к приложению осуществляется с помощью номера порта, например https://mysubdomain.domain.com:445/. Внешне это просто обычный 443: https://mysubdomain.domain.com/. Для внутренних пользователей Url.Action работает отлично хорошо. Для внешних пользователей, даже если я указываю mysubdomain.domain.com для Url.Action, он по-прежнему возвращает localhost для тех, кто обращается через порт 443. Я посмотрел на код MVC для этого и не мог понять, почему он перезаписывает мое имя хоста спецификация.
Я проверил привязку HTTPS в IIS, и она использует правильный сертификат SSL. Интересно, как-то портит переадресация портов с внешнего 443 на внутренний 445?