Неверный запрос - неверное имя хоста с проектом WebPI Asp.net в Visual Studio 2013
Я запускаю очень простой проект webAPI в Visual Studio Pro 2013. Он отлично работает на localhost на моей машине. Затем я пытаюсь перейти в браузер с другой машины и перейти: 57571, подобно тому, как я могу указать на приложения rails, поставив сервер ipapdress, а затем номер порта. Я тогда получаю
Неверный запрос - неверное имя хоста Ошибка HTTP 400. Недопустимое имя хоста запроса.
Я также воспроизвел это, поставив две машины Windows в лазурь. Один работает visual studio pro 2013. Я запускаю одно и то же приложение, и оно отлично работает локально. Затем, если я попытаюсь указать на нее с другой виртуальной машины (в той же виртуальной сети, я также могу ping сервер vm), я все равно получаю Плохой запрос - неверное имя хоста HTTP-ошибка 400. Имя хоста запроса недействительно.
Имейте в виду, что я не забочусь о пользовательском domian. Мне просто нужно иметь возможность запускать это приложение с другого компьютера, используя IP-адрес. Это возможно? (если такие идеи о том, что я делаю неправильно?)
Вот что я пробовал
Не работает для меня
Это также не помогло работать
Как я могу сказать, что visual studio работает как администратор?
(Я использую Windows Server 2012 R2, где работает Visual Studio. Я отключил брандмауэр на обеих машинах)
Ответы
Ответ 1
Вот как я заработал.
goto C:\users\yourusername\Documents\IISExpress\config\applicationhost.config в Visual Studio 2013
Добавьте следующую строку в applicationhost.config, чтобы она работала
<binding protocol="http" bindingInformation="*:53676:*" />
где это не сработало
<binding protocol="http" bindingInformation="<clientsIPaddress>:53676:*" />
Vs2015 Update и точное местоположение для этого изменения application.config описаны ниже.
Путь к файлу следующий для VS 2015.
C:\Users\\{YourUsername}\Documents\Visual Studio 2015\Projects\\{ThisSolutionName}\\.vs\config\applicationhost.config
, как упоминал Даниил.
Где я могу поместить это в свой файл application.config?
Ниже приведены родительские разделы в файле XML, где вы найдете привязки.
<system.applicationHost>
<sites>
<site name="WebSite1" id="1" serverAutoStart="true">
<bindings>
<binding protocol="http" bindingInformation=":8080:localhost" />
</bindings>
</site>
</sites>
</system.applicationHost>
Это была примерно строка 161 для нового проекта, который ничего не менял в приложении application.config.
То, что я не понимал, - это то, что я думал, что IP-адрес клиентов был, на самом деле неправдой. Причина в том, что у меня было подключение VNet к VNet в Azure, а шлюз, соединяющий два IP-адреса, переназначает IP-адрес клиентов в сети, в которой выполнялось мое приложение. Таким образом, мне пришлось искать новый IP-адрес, для которого он был сопоставлен, чтобы не использовать стратегию *:port:*
Ответ 2
Я не могу комментировать, но хотел ответить @EthanKeiser
В Visual Studio 2015 имеется отдельный файл конфигурации для каждого решения, которое необходимо обновить в соответствии с принятым ответом. Этот файл находится по адресу:
C:\Users\\{UserName}\Documents\Visual Studio 2015\Projects\\{SolutionName}\\.vs\config\applicationhost.config
Ответ 3
Еще одна вещь, которая помогла мне, это добавить 127.0.0.1
к привязке.
Таким образом, результат applicationhost.config
выглядит следующим образом:
<bindings>
<binding protocol="http" bindingInformation="*:28066:" />
<binding protocol="http" bindingInformation="*:28066:localhost" />
<binding protocol="http" bindingInformation="*:28066:127.0.0.1" />
<binding protocol="http" bindingInformation="*:28066:sitename.com" />
<binding protocol="https" bindingInformation="*:44302:" />
<binding protocol="https" bindingInformation="*:44302:localhost" />
<binding protocol="https" bindingInformation="*:44302:127.0.0.1" />
<binding protocol="https" bindingInformation="*:44302:sitename.com" />
</bindings>
И файл hosts
выглядит так:
127.0.0.1 localhost
127.0.0.1 sitename.com
Перед добавлением 127.0.0.1
в браузере было нормально перемещаться как https://localhost:44302
, но https://sitename.com:44302
приводил к Bad Request
.
Кроме того, если вы выполняете "горячую замену -r", убедитесь, что вы сбрасываете IIS. Вы можете сделать это, щелкнув правой кнопкой мыши по проекту в Visual Studio, выбрав " Unload project
, затем измените applicationhost.config
, сохраните его и Reload project
в VS.
Кстати, не забудьте сгенерировать SSL-сертификат для вашего проекта. Я не уверен, что Visual Studio сделает это за вас.
Порт должен находиться в диапазоне от 44300 до 44399.
Вот как вы можете генерировать SSL:
- Откройте Инструменты разработчика Visual Studio от имени администратора
-
makecert -r -pe -n CN="dev.helpme.transwestern.com" -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
-
netsh http show sslcert ipport=0.0.0.0:44302
44302 (на этом этапе вам нужно будет получить appid) -
netsh http delete sslcert ipport=0.0.0.0:44302
Теперь откройте "Управление сертификатами компьютера", перейдите в личный кабинет и выберите вновь созданный. Вам понадобится "Детали/Отпечаток пальца".
-
netsh http add sslcert ipport=0.0.0.0:44302 certhash=<thumbprint> appid={id from step 3}
(включая скобки {})
Надеюсь, это поможет.