Почему Url.Action и Request.Url.Host возвращают "localhost"? - PullRequest
3 голосов
/ 21 марта 2012

У меня есть форма на странице, которая публикует сообщения во внешнем приложении, и мне нужно отправить 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 Ответ

1 голос
/ 23 марта 2012

Вы упоминаете переадресацию портов в своем посте.Где осуществляется переадресация портов?Если это сделано в окне IIS, возможно ли, что кто-то настроил переадресацию следующим образом:

https://mysubdomain.domain.com:445 -> http://localhost:443

Это приведет к тому, что при разрешении URL будет использоваться локальный хост, но внутренне переадресация портов не происходит, поэтомуправильный домен разрешен.

...