Почему Url.Action и Request.Url.Host возвращают "localhost"?
У меня есть форма на странице, которая публикует сообщения во внешнем приложении, и мне нужно отправить 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?
1 ответ
Вы упоминаете переадресацию портов в своем посте. Где осуществляется переадресация портов? Если это сделано в окне IIS, возможно, кто-то настроил пересылку следующим образом:
https://mysubdomain.domain.com:445 -> http://localhost:443
Это может привести к тому, что при разрешении URL будет использоваться локальный хост, но внутренняя переадресация портов не происходит, поэтому разрешается правильный домен.