既存のプロジェクトのlocalhost
コピーにC#Web APIコンポーネント(Web APIモデルとコントローラー)を追加しました。
このWeb APIのGETメソッドは、Androidアプリから呼び出す必要があります。 このリンク では、Androidエミュレーターで10.0.2.2
を使用してコンピューターの127.0.0.1
を取得する必要があると説明されています。
これを行ったとき、AndroidアプリのHttpRequestで機能しませんでした。そこで、私はAndroidブラウザーにアクセスして直接入力しましたが、それも機能しませんでした。
次に、コンピューターのブラウザーでlocalhost
の代わりに127.0.0.1
を使用しようとしましたが、何らかの理由で機能しません。localhost
と127.0.0.1
に違いはありますか?いつも同じだと思っていました。
400 error
を使用すると、127.0.0.1
が表示されます。
また、localhost
を使用すると、すべて正常に機能します。
だから、私の質問:エミュレータでlocalhost
を使用するにはどうすればよいですか(または、localhost
の代わりに127.0.0.1
を使用すると発生するエラーを修正するにはどうすればよいですか)?また、私は常にlocalhost
と127.0.0.1
の違いを知りたいと思っています。なぜなら、それらは常に同じだと思っていたからです。
回答ありがとうございます。
編集1:
このstackoverflowの質問 では、WindowsのSystem32
のHostファイルに言及しています。このファイルを(管理者として)Notepad ++で開き、127.0.0.1 localhost
と::1 localhost
の行のコメントを外しました。しかし、残念なことに、これで問題は解決しませんでした。また、localhost
の代わりとして、127.0.0.1
をコンピューターで使用することはできません。おそらく私の問題が逆になっているためです(localhost
にアクセスできますが、127.0.0.1
にアクセスすることはできません)。
編集2:
このstackoverflowの答え では、localhost
と127.0.0.1
の違いは次のとおりであると説明されています:
127.0.0.1
は、一部のプログラミング言語ではIPとしてより簡単に認識されます。localhost
は、コンピューターのホストファイル(myEdit 1に記載されているファイル)で別のIPに変更できます。私は今、違いをすべて理解していますが、ローカルホストが動作している理由はわかりませんが、127.0.0.1は動作しません。
編集3:
port
で何かする必要がありますか(port
として54408
を使用しています)? 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
以前の2行は次のとおりでした。
# 127.0.0.1 localhost
# ::1 localhost
編集5 /半解決策:
Jake Cの提案の後、Visual Studioのポート構成を探しに行き、 次のサイト を見つけました。 「Visual Studio開発サーバーを使用するWebアプリケーションプロジェクトのポートを指定するには」セクションで、指示に従ってWebオプションを変更しました。 Use Visual Studio Development Server
を使用してプロジェクトプロパティを54408 port
に追加します。
127.0.0.1:54408
ホームページが機能するようになったため、これは正しい方向への大きな一歩でした。ただし、C#WebサイトでGoogle OAuth
を使用してログインしようとすると、次のエラーが表示されました。
C#Webプロジェクトに携わった元同僚の1人が このstackoverflow post について一度話しました。この投稿の回答には、redirect-urls
(私の場合は127.0.0.1
)をGoogle APIs Console
に追加する必要があると記載されています。ただし、Console
を介して取得されるため、localhost
プロジェクトでは、このSVN
にアクセスできません。このC#WebプロジェクトのGoogle APIs Console
を表示し、おそらくredirect-urls
を編集して127.0.0.1
を含める許可をスーパーバイザーに求めます。
Http port configurations
についての彼の説明が実際に答えを見つけるのに役立ったので、完全に機能するようになったら、Jake Cの答えを受け入れます。
編集6:
OK、私は自分のGoogle APIコンソールを使用して、新しいクライアントIDで新しいプロジェクトを作成しました。 http://localhost:54408/Account/ExternalLoginCallback
とhttp:127.0.0.1:54408/Account/ExternalLoginCallback
の両方をリダイレクトURLに追加しました。次に、C#WebプロジェクトのApp_Start/AuthConfig.cs
で、この新しいクライアントを使用するようにクライアント設定を変更しました。
再度、Visual Studioでhttp port configurations
を変更するように提案してくれたJake Cに感謝します。これは私のためにトリックをしました。
したがって、通常、HTTP 400 Invalid Hostnameエラーは、通常、すべてのホスト名やIPアドレスを受け入れるWebサイトが設定されていないことを意味します。これは、IISでこれをホストしているC#アプリケーションだからです。これを修正するには、IIS Manager(Win + Rでinetmgr
と入力))、サーバー、[サイト]の順に展開し、アプリケーションがホストされているWebサイトを右クリックして、このリストには、ポート54408のhttpバインディングがあるはずです、これをダブルクリックしますIPアドレスで[すべて未割り当て]が選択されていることを確認し、[ホスト名]でフィールドが空白であることを確認します。設定は、IISをリセットせずにすぐに有効になります。
Visual Studioに組み込まれたWeb展開を介してのみこれをテストする場合、VSのどこかに上記と同様の設定があります(どこでどのように正確に思い出せないので、少し錆びています)。または、IIS希望どおりにWebサイトをセットアップし、独自の内部サーバーを使用する代わりにVSをそのWebサイトにデプロイすることができます。デバッグにはいくつかの欠点があると思いますただし、このように(詳細については少し曖昧になりましたが、思い出したり理解したりして編集します)。
これらの設定が存在する理由に関する少しの背景:サーバーは、ポート80を介してすべてアクセスされる複数のサイトをホストする必要がある場合があります。したがって、foo.com
およびbar.com
があり、小さすぎる両方に別々のサーバーを取得することを保証します。その代わり、両方とも1.2.3.4
のIPアドレスを持つサーバーでホストされます。ブラウザにURL foo.com
を入力してgoを押すと、最初にホスト名が1.2.3.4
に解決され、次にリクエストが作成され、そのリクエストの一部がホストヘッダーと呼ばれます。ホストヘッダーには、入力したURLのホスト名、この場合はfoo.com
が入力されます。サーバーがリクエストを受信すると、Hostヘッダーを見て、foo.com
のコンテンツを返します。
ブラウザーに1.2.3.4
を入力しようとすると、何も指定されていないため、空のHostヘッダーを持つ要求が作成されます。サーバーがリクエストを受信すると、サーバーでホストされているWebサイトが2つあり、ブラウザーが探しているWebサイトを指定するHostヘッダーがないため、何をすべきかがわかりません。代わりにエラーを返します。
これはおそらくあなたの状況で起こっていることです。ウェブサイトはlocalhost
ホスト名でホストされており、他のリクエストには応答していません。変更するように指定した設定は、基本的に、サーバーにどのIPアドレス(ネットワークインターフェイス)が入ろうとも、それが探しているホスト名に関係なく、サーバーがポート54408に入ってくる限り、これを提供することです。ウェブサイト。
Visual Studioに組み込まれているWebサーバー(IIS Express)を使用している場合、localhostはデフォルトでマッピングされます。 127.0.0.1を有効にするには:
1)パス:%USERPROFILE%\ Documents\IISExpress\config
2)構成ファイルを見つけます:applicationhost.config
3)-エディターで構成ファイルを開く(notepad ++を使用)
4)サイトポートを検索します。たとえば、URLが通常localhost:57578である場合、「57578」を検索すると、次の項目が見つかります。
<binding protocol="http" bindingInformation="*:57578:localhost" />
5)このエントリを次のように変更します。
<binding protocol="http" bindingInformation="*:57578:*" />
6)保存して終了し、Webサイトを再起動します。
注:新しい仮想ディレクトリを作成する(ポート番号Project/Properties/Web/Project Urlを変更する)たびにこのプロセスを繰り返して、applicationhost.configファイルに新しいエントリを作成します。
Visual Studio 2015では、IIS express:プロジェクトプロパティの最初にプロジェクトのURLを http:// localhost:(Port No)から: http: //127.0.0.1 :(ポート いいえ)
[Visual Directoryの作成]をクリックします
次に、ソリューションパスに移動し、「。vs」ディレクトリ(ディレクトリは非表示)を開き、「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>
webアプリの最後のバインディングセクションを* :(ポート番号):localhostから* :(ポート番号):127.0.0.1に変更します
IIS Expressで実行中のすべてのプロジェクトを停止し、再起動します。
私はそれが少し古い投稿であることを知っています。しかし、私のソリューションは、少なくとも数分は誰かを助けることができます。実行しているWebサイトに複数のバインディングがある場合は、削除してください。 IPアドレスを1つだけ持っている:すべて未割り当ておよびHostNameが空白に設定されている
それはおそらくAndroidでもWindowsの問題でもありません。VisualStudioでローカルホストを実行する場合、127.0.0.1経由では利用できません。
代わりに、コンピューターでIISを設定してから、Visual StudioからIISに展開してください。
または、UltiDev製品を試してください: http://ultidev.com/products/cassini/CassiniDevGuide.htmhttp://ultidev.com/products/UWS-Cassini-Pro/Default。 aspx
一部の人々はトンネリングを使用することができましたが、私はそれを試したことがなく、何を推奨するべきか見当がつきません。
127.0.0.1をリッスンし、そこからローカルホストにデータをリダイレクトするもの