C# Web – localhost:porta funziona, 127.0.0.1:la porta non funziona

Ho appena finito di aggiunta di C# Web API componenti (Web API Modelli & Controller) per un localhost copia di un progetto esistente.

Web API GET-metodi dovrebbe essere chiamato da un’app Android. In questo link ha spiegato dovrei usare 10.0.2.2 su l’Emulatore di Android per ottenere il computer 127.0.0.1.

Quando ho fatto questo, ma non ha funzionato per il mio HttpRequest in Android app. Così sono andato in Android browser e digitate direttamente, e non di lavoro.

Poi ho provato con 127.0.0.1 invece di localhost nel mio browser del computer, e per qualche motivo sconosciuto non funziona.. c’È di diverso tra localhost e 127.0.0.1? Ho sempre pensato che fossero la stessa cosa.

Qui è il 400 error ottenere quando si utilizza 127.0.0.1:
C# Web - localhost:porta funziona, 127.0.0.1:la porta non funziona

E con localhost tutto funziona bene.

Così, la mia domanda: Come posso utilizzare localhost sull’Emulatore (o, come posso risolvere l’errore che ricevo quando si utilizza 127.0.0.1 invece di localhost)? Inoltre, vorrei sapere la differenza tra localhost e 127.0.0.1, poiché ho sempre pensato che fossero la stessa cosa.

Grazie in anticipo per le risposte.


Edit 1:

In questo stackoverflow domanda parlare il file host in System32 di Windows. Ho aperto il file con Notepad++ (come Amministratore) e decommentato le righe con 127.0.0.1 localhost e ::1 localhost. Ma sfortunatamente questo non ha risolto il problema e non riesco ancora a usare 127.0.0.1 sul mio computer come un sostituto per localhost. Probabilmente perché il mio problema è il contrario (posso accedere localhost, ma non 127.0.0.1, anziché il contrario.)


Edit 2:

In questo stackoverflow risposta ha spiegato che le differenze tra localhost e 127.0.0.1 sono:

  • 127.0.0.1 saranno più facilmente riconosciuto come un IP in alcuni linguaggi di programmazione.
  • localhost può essere cambiato in un altro IP del computer host file (il file citato nel mio Modifica 1).
  • Ci sono alcune differenze tra IPv4 e IPv6.

Tutti e tutte, ho un pò di comprendere le differenze ora, io proprio non capisco perché il mio localhost funziona, ma 127.0.0.1 non lo è..


Edit 3:

Ha a che fare qualcosa con la port (io uso 54408 come port)? Ho aperto cmd e ha fatto le seguenti prove:

  • ping localhost: Ricevo una risposta con 4 volte Reply from ::1: time<1ms.
  • ping 127.0.0.1: Ricevo una risposta con 4 volte Reply from 127.0.0.1: bytes=32 time<1ms TIL=128
  • ping localhost:54408: Sto ricevendo un errore Ping request could not find localhost:54408. Please check the name and try again.
  • ping 127.0.0.1:54408: Sto ricevendo un errore Ping request could not find 127.0.0.1:54408. Please check the name and try again.

E come ho detto prima: 127.0.0.1:54408 nel browser dà l’errore si vede nell’immagine sopra. E localhost:54408 funziona bene..

Ancora nessuno che ha un’idea su come risolvere questo problema?


Edit 4:

Copia del mio hosts-file, situato in 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

Le ultime due righe prima:

#      127.0.0.1     localhost
#      ::1           localhost

Modifica 5 /Semi-Soluzione:

Dopo Jake C suggerimento sono andato alla ricerca di Visual Studio configurazione della porta e trovato il seguente sito. Nella sezione “Per specificare una porta per un progetto di applicazione Web che utilizza il Server di Sviluppo Visual Studio” ho seguito le istruzioni e ha cambiato il Web opzione nelle Proprietà del Progetto per Use Visual Studio Development Server con il mio 54408 port.

Questo è stato un grande passo nella giusta direzione, in quanto 127.0.0.1:54408 homepage ora funziona. Tuttavia, una volta che cerco di accedere con il Google OAuth in C# del sito, mi è stato sempre il seguente errore:
C# Web - localhost:porta funziona, 127.0.0.1:la porta non funziona

Uno dei miei ex-colleghi che hanno lavorato al C# web del progetto una volta mi ha detto circa questo post stackoverflow. In risposta a questo post è affermato che dovrei aggiungere il redirect-urls (nel mio caso 127.0.0.1) per il Google APIs Console.
Adesso non ho accesso a questo Console per il mio localhost progetto, tuttavia, dal momento che si ottiene attraverso SVN. Vorrei chiedere ai miei supervisori per l’autorizzazione a visualizzare il Google APIs Console di questo C# web del progetto e, forse, modificare il redirect-urls per includere 127.0.0.1.

Una volta che ho ottenuto è completamente funzionante io accettare Jake C risposta, dal momento che la sua spiegazione del Http port configurations fatto davvero aiutarmi a trovare la risposta.


Edit 6:

Ok, ho usato la mia Console delle Api di Google e creato un nuovo Progetto con un nuovo ID del Client. Ho aggiunto sia il http://localhost:54408/Account/ExternalLoginCallback e http:127.0.0.1:54408/Account/ExternalLoginCallback a reindirizzare gli url. Quindi nel mio C# web del progetto App_Start/AuthConfig.cs ho cambiato le impostazioni del Client per l’utilizzo di questo nuovo client.

Ancora una volta grazie Jake C per il tuo suggerimento di cambiare il http port configurations in Visual Studio. Questo ha fatto il trucco per me.

  • Ho dato uno sguardo nel tuo file hosts nella Windows32 cartella, forse qualcosa non va c’è? È localhost sicuramente mappati su 127.0.0.1 o avete cancellato a un certo punto, forse?
  • sì ho fatto io (vedi la prima Modifica). Tutto il System32 hosts-file è un commento, tranne che per le ultime due righe: 127.0.0.1 localhost e ::1 localhost. Ho aggiunto il file completo a Modificare 4.
  • Prova a mettere il # per commentare le ultime 2 righe troppo. Sul mio file hosts sono commentati, quindi sto assumendo che essi commentato.
  • Hanno usato per essere commentato nel mio file per impostazione predefinita. Ho provato a commentare di nuovo, come si è detto, ma sono ancora ottenere gli stessi risultati..



6 Replies
  1. 9

    Così tipicamente HTTP 400 Invalid Hostname errore di solito significa che non hanno il sito web, di set di accettare tutti i nomi degli host e/o indirizzi IP. Presumo perché questa è un’applicazione C# si ospitano questo su IIS. Per risolvere questo aprire Gestione IIS (Win+R e inserire inetmgr), espandere il server, quindi, i Siti, quindi fare clic destro su il sito, l’applicazione, in cui è ospitato e selezionare le associazioni. In questo elenco ci dovrebbe essere un’http vincolante per porta 54408, fare doppio clic su questo. In indirizzo IP assicurarsi che nessuno è selezionata, e sotto il nome Host assicurarsi che il campo è vuoto. Premere OK, quindi Chiudere. L’impostazione dovrebbe entrare in vigore immediatamente, senza bisogno di reimpostare IIS.

    Se sono solo test di questo attraverso Visual Studio integrato di distribuzione web, ci sono impostazioni simili a quanto sopra da qualche parte in VS (sono un po ‘ arrugginito su di esso quindi non ricordo esattamente dove e come). In alternativa, è possibile impostare un sito web in IIS esattamente come si desidera e poi VS distribuire il sito internet invece di usare proprio server interno. Penso che ci potrebbe essere qualche debug svantaggi di fare in questo modo anche se (ancora una volta, io sono un po ‘ confuso nei dettagli, io modificare di loro quando li ricordo o capire).

    Un po ‘ di background perché queste impostazioni:
    A volte un server per ospitare più siti che sono tutti accessibili tramite la porta 80. Quindi, consente di dire che abbiamo foo.com e bar.com e sono troppo piccoli per garantire sempre un server separato per entrambi. Così, invece sono entrambi ospitato su un server con indirizzo IP 1.2.3.4. Ora, quando si immette l’URL foo.com nel browser e premere go, prima si risolve il nome host 1.2.3.4, e quindi crea una richiesta ed una parte di quella richiesta è chiamato l’intestazione host. L’intestazione host è riempito con il nome host dell’URL inserito, in questo caso foo.com. Quando la richiesta viene ricevuta dal server, guarda l’intestazione host e serve indietro il contenuto per foo.com.

    Ora, se si dovesse provare a inserire 1.2.3.4 nel browser, si verrebbe a creare una richiesta con un’intestazione host vuota, perché non è stato specificato. Quando la richiesta viene ricevuta dal server, non sa cosa fare, perché ci sono due siti web ospitati dal server e non vi è alcuna intestazione host per specificare quale il browser cercando, così, invece, restituisce un errore.

    Questo è probabilmente ciò che sta accadendo nella vostra situazione. Il vostro sito è ospitato sotto la localhost hostname e per qualsiasi altra richiesta non si è risposto. Le impostazioni specificate per cambiare sono fondamentalmente dicendo che il server che non importa quale indirizzo IP (interfaccia di rete) viene in su, e non importa ciò che il nome host di ricerca, purché sia in entrata sulla porta 54408, servono a questo sito web.

    • Il C# Sito non è ospitato tramite IIS, e inetmgr non è un comando valido sul mio PC. Cercherò http vincolanti per le porte in Visual Studio, però, quindi grazie per l’ingresso. Grazie anche per la spiegazione di ciò potrebbe essere la causa. +1
    • Ho trovato il Http port configurations in Visual Studio ed è riuscito a ottenere la homepage di lavoro con 127.0.0.1 (vedere modifica 5), quindi grazie mille per già. Ora ho solo bisogno di risolvere un problema con redirect-urls entro il Google APIs Console una volta che ho il permesso di mio supervisore per modificarlo.
  2. 12

    Se si utilizza Visual Studio del server web (IIS Express), localhost è mappata per impostazione predefinita; per attivare il 127.0.0.1:

    1) il percorso: %USERPROFILE%\Documenti\IISExpress\config

    2) Individuare il file di configurazione: applicationhost.config

    3) – open config file editor (io uso notepad++)

    4) di Ricerca per il sito di porto, per esempio, se l’url è di solito localhost:57578, la ricerca di “57578” e dovresti trovare:

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

    5) Modificare questa voce:

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

    6) Salvare e uscire, riavviare sito web.

    Nota: Si vuole ripetere questo processo ogni volta che si crea una nuova directory virtuale (modifica il numero di porta Progetto/Proprietà/Web/Url Progetto), che crea una nuova voce nel applicationhost.file di configurazione.

  3. 10

    In visual studio 2015 con IIS express:
    primo nel progetto di modifica proprietà url del progetto da http://localhost:(Porta No)
    per : http://127.0.0.1:(Porta No)

    e fare clic su Crea Directory Visual

    poi vai al tuo percorso di soluzione e aprire “.vs” dirctory (la cartella è nascosta) e aprire “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>

    e cambiare l’ultima sezione di associazione di web app da *:(Senza Porta):localhost *:(Senza Porta):127.0.0.1

    e arresto in esecuzione di un progetto su IIS Express e riavviare.

  4. 1

    So che è un po ‘ vecchio post. Ma la mia soluzione può aiutare qualcuno ad almeno un paio di minuti di tempo.
    Se si dispone di più di un binding sul sito si esegue eliminarlo. Hanno un solo indirizzo IP: nessuno nome e impostare VuotoC# Web - localhost:porta funziona, 127.0.0.1:la porta non funziona

  5. 0

    Probabilmente non è un Android e Windows problema. Se si esegue il tuo localhost da Visual Studio non ti capisco disponibile via 127.0.0.1

    Invece tenta di impostare IIS sul computer, quindi distribuire da Visual Studio per IIS

    In alternativa, provare a UltiDev prodotti:
    http://ultidev.com/products/cassini/CassiniDevGuide.htm
    http://ultidev.com/products/UWS-Cassini-Pro/Default.aspx

    Alcuni popoli è riuscito a usare il tunneling, ma non ho mai provato e non hanno idea di cosa consiglia.

    Solo qualcosa che ascolto 127.0.0.1 e il reindirizzamento di dati-e localhost

  6. 0

    Vai nella cartella .vs/config e aprire applicationhost.config e modificare

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

    a 127.0.0.1

    <bindings>
         <binding protocol="http" bindingInformation="*:58670:127.0.0.1" />
    </bindings>

    E cambiare anche questo, per eseguire direttamente utilizzando 127.0.0.1

    C# Web - localhost:porta funziona, 127.0.0.1:la porta non funziona

Lascia un commento