Подтвердить что ты не робот

С# Web - localhost: порт работает, 127.0.0.1:port не работает

Я только что добавил компоненты С# Web API (модели и контроллеры веб-интерфейсов) к копии существующего проекта localhost.

Этот веб-API GET-методы следует вызывать из приложения для Android. В эта ссылка объяснила, что я должен использовать 10.0.2.2 в эмуляторе Android, чтобы получить компьютер 127.0.0.1.

Когда я это сделал, это не сработало для моего HttpRequest в приложении для Android. Поэтому я пошел в браузер Android и набрал его напрямую, и он также не работал.

Затем я попытался использовать 127.0.0.1 вместо localhost в своем браузере компьютера, и по какой-то неизвестной причине он также не работает. Есть ли разница между localhost и 127.0.0.1? Я всегда думал, что они были одним и тем же.

Вот 400 error я получаю при использовании 127.0.0.1: 127.0.0.1 error 400 bad request

И с localhost все работает нормально.

Итак, мой вопрос: как я могу использовать localhost в эмуляторе (или, как я могу исправить ошибку, которую я получаю при использовании 127.0.0.1 вместо localhost)? Кроме того, я хотел бы знать разницу между localhost и 127.0.0.1, так как я всегда думал, что они были одинаковыми.

Заранее благодарим за ответы.


Изменить 1:

В qaru.site/info/202386/... они упоминают файл хоста в System32 Windows. Я открыл этот файл Notepad ++ (как Администратор) и раскомментировал строки с помощью 127.0.0.1 localhost и ::1 localhost. Но, к сожалению, это не устранило проблему, и я все еще не могу использовать 127.0.0.1 на своем компьютере в качестве замены для localhost. Вероятно, потому что моя проблема - обратная (я могу получить доступ к localhost, но не 127.0.0.1, а не наоборот).


Изменить 2:

В qaru.site/info/63974/... он объяснил, что различия между localhost и 127.0.0.1:

  • 127.0.0.1 будет легче распознаваться как IP на некоторых языках программирования.
  • localhost можно изменить на другой IP-адрес в хост файле компьютера (файл, указанный в моем Редактировании 1).
  • Существуют некоторые различия между IPv4 и IPv6.

Всем и всем, что я сейчас понимаю разницы, я просто не понимаю, почему мой локальный хост работает, но 127.0.0.1 не..


Изменить 3:

Нужно ли что-то делать с port (я использую 54408 как port)? Я открыл cmd и выполнил следующие тесты:

  • ping localhost: Я получаю ответ с 4 раза Reply from ::1: time<1ms.
  • ping 127.0.0.1: я получаю ответ с 4 раза Reply from 127.0.0.1: bytes=32 time<1ms TIL=128
  • ping localhost:54408: Я получаю сообщение об ошибке Ping request could not find localhost:54408. Please check the name and try again.
  • ping 127.0.0.1:54408: Я получаю сообщение об ошибке Ping request could not find 127.0.0.1:54408. Please check the name and try again.

И, как я уже говорил раньше: 127.0.0.1:54408 в браузере дает ошибку, показанную на изображении выше. И localhost:54408 работает просто отлично.

По-прежнему никто не знает, как это исправить?


Изменить 4:

Скопируйте мой hosts-file, расположенный в C:\Windows\System32\drivers\etc.

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
127.0.0.1   localhost
::1         localhost

Последние две строки:

#      127.0.0.1     localhost
#      ::1           localhost

Изменить 5/Полу-решение:

После предложения Jake C я пошел искать конфигурацию порта Visual Studio и нашел следующий сайт. В разделе "Чтобы указать порт для проекта веб-приложения, использующего сервер разработки Visual Studio", я выполнил инструкции и изменил параметр "Веб" в "Свойства проекта" на Use Visual Studio Development Server с помощью моего 54408 port.

Это был отличный шаг в правильном направлении, так как теперь работает страница 127.0.0.1:54408. Однако, как только я попытаюсь войти в систему с Google OAuth на веб-сайте С#, я получил следующую ошибку: enter image description here

Один из моих бывших коллег, которые работали над веб-проектом С#, однажды сказал мне о qaru.site/info/25811/.... В ответе этого сообщения указано, что я должен добавить redirect-urls (в моем случае 127.0.0.1) в Google APIs Console. Прямо сейчас у меня нет доступа к этому Console для моего проекта localhost, так как он получен через SVN. Я попрошу одного из моих наблюдателей получить разрешение на просмотр Google APIs Console этого веб-проекта С# и, возможно, отредактировать redirect-urls, чтобы включить 127.0.0.1.

Как только у меня все получится, я соглашусь ответить Джейком С, поскольку его объяснение Http port configurations действительно помогло мне найти ответ.


Изменить 6:

Хорошо, я использовал свою собственную консоль API Google и создал новый проект с новым идентификатором клиента. Я добавил теги http://localhost:54408/Account/ExternalLoginCallback и http:127.0.0.1:54408/Account/ExternalLoginCallback к URL-адресам перенаправления. Затем в моем веб-проекте С# App_Start/AuthConfig.cs я изменил настройки клиента, чтобы использовать этот новый клиент.

Еще раз спасибо Jake C за ваше предложение изменить Http port configurations в Visual Studio. Это сделало трюк для меня.

4b9b3361

Ответ 1

Таким образом, как правило, ошибка HTTP 400 Invalid Hostname обычно означает, что у вас нет веб-сайта, который принимает все имена хостов и/или IP-адреса. Я предполагаю, что это приложение С#, которое вы размещаете в IIS. Чтобы исправить этот открытый диспетчер IIS (Win + R и введите inetmgr), разверните сервер, затем "Сайты", затем щелкните правой кнопкой мыши веб-сайт, на котором размещено ваше приложение, и выберите привязки. В этом списке должна быть привязка http для порта 54408, дважды щелкните по этому значку. Под IP-адресом убедитесь, что выбрано значение All Unassigned, и под именем Host убедитесь, что поле пустым. Нажмите "ОК", затем "Закрыть". Настройка должна вступить в силу немедленно, без использования reset IIS.

Если вы тестируете это только через Visual Studio, встроенную в веб-развертывание, аналогичные настройки имеют место выше в VS (я немного ржавый, поэтому я не могу точно запомнить, где и как). В качестве альтернативы вы можете настроить веб-сайт в IIS точно так, как вы хотите, а затем развертывать VS на этом веб-сайте, а не использовать собственный внутренний сервер. Я думаю, что могут быть некоторые недостатки отладки, чтобы сделать это таким образом, хотя (еще раз я немного нечеткий по деталям, я буду редактировать их, когда я их помню или выясню).

Немного о том, почему эти настройки существуют: Иногда серверу необходимо разместить несколько сайтов, к которым все будут доступны через порт 80. Так что скажем, что у нас есть foo.com и bar.com, и они слишком малы, чтобы гарантировать получение отдельного сервера для обоих из них. Поэтому вместо этого они размещаются на сервере с IP-адресом 1.2.3.4. Теперь, когда вы введете URL-адрес foo.com в браузер и нажмите "go", сначала он разрешает имя узла 1.2.3.4, а затем создает запрос, а часть этого запроса называется заголовком хоста. Заголовок хоста заполняется именем хоста введенного URL, в данном случае foo.com. Когда запрос получен сервером, он смотрит на заголовок узла и возвращает содержимое для foo.com.

Теперь, если вы попытаетесь ввести 1.2.3.4 в браузер, он создаст запрос с пустым заголовком хоста, потому что ничего не указано. Когда запрос получен сервером, он не знает, что делать, потому что на сервере размещены два веб-сайта, и нет заголовка хоста, чтобы указать, какой браузер ищет, поэтому вместо этого он возвращает ошибку.

Вероятно, это то, что происходит в вашей ситуации. Ваш веб-сайт размещается под именем localhost, и на любой другой запрос не отвечает. Настройки, которые я указал для изменения, в основном говорят серверу, что независимо от того, какой IP-адрес (сетевой интерфейс) он входит в систему, и независимо от того, какое имя хоста он ищет, пока он входит в порт 54408, сайт.

Ответ 2

Если вы используете Visual Studio, встроенную в веб-сервер (IIS Express), localhost отображается по умолчанию; для включения 127.0.0.1:

1) На пути:% USERPROFILE%\Documents\IISExpress\config

2) Найдите файл конфигурации: applicationhost.config

3) - открыть файл конфигурации в редакторе (я использую блокнот ++)

4) Найдите порт сайта, например, если URL-адрес обычно является localhost: 57578, выполните поиск "57578", и вы должны найти:

<binding protocol="http" bindingInformation="*:57578:localhost" />

5) Измените эту запись на:

<binding protocol="http" bindingInformation="*:57578:*" />

6) Сохранить и выйти, перезапустить веб-сайт.

Примечание. Вы захотите повторить этот процесс при создании нового виртуального каталога (измените номер порта Project/Properties/Web/Project Url), который создает новую запись в файле applicationhost.config.

Ответ 3

В visual studio 2015 с IIS express: сначала в свойствах проекта измените URL проекта из http://localhost:(Port Нет)  to: http://127.0.0.1:(Port Нет)

и нажмите "Создать визуальный каталог"

затем перейдите к пути решения и откройте ".vs" dirctory (каталог скрыт) и откройте "applicationhost.config"

<sites>
        <site name="WebSite1" id="1" serverAutoStart="true">
            <application path="/">
                <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation=":8080:localhost" />
            </bindings>
        </site>
        <site name="####" id="2">
            <application path="/" applicationPool="Clr4IntegratedAppPool">
                <virtualDirectory path="/" physicalPath="E:\Visual Studio 2015\Projects\####\####" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:5050:localhost" />
            </bindings>
        </site>
        <site name="####(1)" id="3">
            <application path="/" applicationPool="Clr4IntegratedAppPool">
                <virtualDirectory path="/" physicalPath="E:\Visual Studio 2015\Projects\####\####" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:5050:127.0.0.1" />
            </bindings>
        </site>
        <siteDefaults>
            <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
            <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
        </siteDefaults>
        <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
        <virtualDirectoryDefaults allowSubDirConfig="true" />
    </sites>

и изменить последний раздел привязки вашего веб-приложения от *:( Port No): localhost to *:( Port No): 127.0.0.1

и остановите все запущенные проекты на IIS Express и перезапустите их.

Ответ 4

Я знаю это немного старый пост. Но мое решение могло помочь кому-то хотя бы на несколько минут. Если на веб-сайте, на котором вы работаете, есть несколько привязок, удалите его. У вас есть только один с IP-адресом: All Unassigned и HostName установлены на Blank enter image description here

Ответ 5

Вероятно, это не проблема Android и Windows. Если вы запустите свой localhost с помощью Visual Studio, вы не сможете получить его через 127.0.0.1

Вместо этого попробуйте установить IIS на свой компьютер, затем разверните из Visual Studio в IIS

Кроме того, попробуйте продукты UltiDev: http://ultidev.com/products/cassini/CassiniDevGuide.htm http://ultidev.com/products/UWS-Cassini-Pro/Default.aspx

Некоторым людям удалось использовать туннелирование, но я никогда не пробовал и не знал, что рекомендовать.

Просто то, что прослушивает 127.0.0.1 и перенаправляет данные из-на него и localhost