2014-09-01 2 views
3

Мы только что обнаружили проблему с нашим новым «облачным» хостингом. В основном NAT/port forward сконфигурирован, потому что они не разрешают множественные внутренние IP-адреса, чтобы SSL-сертификаты могли выполняться для нескольких сайтов.MVC3 генерирует URL-адреса, включая номер порта, как его остановить

Это вызывает проблему с любым маршрутом MVC, который генерируется, когда протокол также указан. Также, если попытка перейти на URL-адрес, требующий входа в систему, параметр ReturnUrl в URL-адресе переадресованного https также содержит номер порта.

Вопрос: есть ли способ сказать MVC, чтобы он никогда не включал номер порта, даже если он присутствует, за исключением использования перегрузок методов/маршрутов UrlHelpers, которые позволяют вам указать домен и, следовательно, вручную отключить номер порта.

В случае, если это не очевидно из сказанного выше, что процесс запроса, как, вот небольшой пример:

  • Пользователи браузер делает запрос на сайт
  • пересылает Серверные же URL, но с номером порта, прикрепленного
  • страница сгенерирована
  • Ответ отправлен обратно в браузер пользователей.
  • Пользователь регистрируется, но теперь URL-адрес возврата имеет порт, поэтому, когда он перенаправляет пользователя, страница не может быть отображена.

Из-за перенаправления портов malarkey это, по-видимому, вызывает перенаправление MVCs. Не зная технической стороне сервера так хорошо Я не уверен, что это просто хостинг-компания, которая не настраивает что-то правильно в IIS или вещах NAT, или есть просто некоторые материалы web.config, которые нуждаются в настройке, чтобы MVC мог генерировать правильные URL-адреса, как будто этот порт malarkey не существует.

Любые советы или указатели наиболее оценены.

+0

Ух, если у вас есть клиентский скрипт, это тоже будет головной болью. Возможно, люди, работающие в [Server Fault] (http://serverfault.com/), могут помочь на стороне конфигурации ... со своей стороны, я не понимаю, почему порт добавлен в первую очередь - toggle "' 443' и '80' (http/s)? – EdSF

+0

Нет, это связано с тем, что у вас есть один сервер, на котором размещаются несколько сайтов, но для целей сертификатов SSL ему нужен IP-адрес, и вы не можете иметь тот же IP-адрес, который был зарегистрирован для нескольких доменов. Поскольку на облачном сервере разрешено только 1 внутренний IP-адрес, пересылка с номером порта для разграничения была единственным способом, но это вызвало упомянутые проблемы. Однако см. Мой собственный ответ - фу! – Peter

ответ

5

К счастью для меня выясняется, что есть решение для конфигурации (потому что люди спрашивали: «Как насчет изменения кода?» -> «Я серьезно: НЕТ, это должна быть проблема с конфигурацией»).

Решение прост в реализации; добавить следующее в <appSettings> разделе web.config:

<add key="aspnet:UseHostHeaderForRequestUrl" value="true" />

Таким образом, когда ASP.NET/MVC генерирует URL, он всегда будет использовать заголовок хоста для веб-сайта, на котором запрос пользователей было сделано вместо версия с портами, yay!

+0

+1 Теперь это интересно! – EdSF

Смежные вопросы