Я создаю веб-сайт с использованием MVC3, я использую синтаксис бритвы для создания представлений, и все это работает под лазурью.
В настоящее время я работаю под эмулятором Azure локально.
У меня есть вид по URL: 'http://localhost:81/Blah/Foo'.
В этом представлении я хочу получить URL для другого действия.
Для этого я использую: Url.Action («SomeAction», «SomeController», null, this.Request.Url.Scheme)
Однако из-за балансировки нагрузки эмулятор Azure делает номер порта, на который делается запрос об изменениях.
т.е. пока он работает на порту 81, запрос может исходить от порта 82.
Это приводит к созданию неправильного URL 'http://localhost:82/Blah/Bar', и я получаю 400, неверное имя хоста.
После информации в этом посте http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/9142db8d-0f85-47a2-91f7-418bb5a0c675/ Я обнаружил, что могу получить правильный хост и номер порта, используя HttpContext.Request.Headers ["Host"].
Но я могу только передать имя хоста в Url.Action, если я попытаюсь передать имя хоста и порт, то он все равно добавит, как он считает, правильный порт, поэтому я получу localhost: 81: 82.
РЕДАКТИРОВАТЬ: Я нашел кого-то с той же проблемой. Похоже, они собрали ту же информацию, что и я (за исключением того, что они также содержат репродукцию), но у них нет полезного исправления, поскольку я не могу указать номер порта вручную.
http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/87c729e8-094c-4578-b9d1-9c8ff7311577/
Полагаю, одним из исправлений было бы создание собственной перегрузки Url.Action, позволяющей указать порт.