web-dev-qa-db-ja.com

C#Web-localhost:portは機能しますが、127.0.0.1:portは機能しません

既存のプロジェクトの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を使用しようとしましたが、何らかの理由で機能しません。localhost127.0.0.1に違いはありますか?いつも同じだと思っていました。

400 errorを使用すると、127.0.0.1が表示されます。 127.0.0.1 error 400 bad request

また、localhostを使用すると、すべて正常に機能します。

だから、私の質問:エミュレータでlocalhostを使用するにはどうすればよいですか(または、localhostの代わりに127.0.0.1を使用すると発生するエラーを修正するにはどうすればよいですか)?また、私は常にlocalhost127.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の答え では、localhost127.0.0.1の違いは次のとおりであると説明されています:

  • 127.0.0.1は、一部のプログラミング言語ではIPとしてより簡単に認識されます。
  • localhostは、コンピューターのホストファイル(myEdit 1に記載されているファイル)で別のIPに変更できます。
  • IPv4とIPv6にはいくつかの違いがあります。

私は今、違いをすべて理解していますが、ローカルホストが動作している理由はわかりませんが、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を使用してログインしようとすると、次のエラーが表示されました。 enter image description here

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/ExternalLoginCallbackhttp:127.0.0.1:54408/Account/ExternalLoginCallbackの両方をリダイレクトURLに追加しました。次に、C#WebプロジェクトのApp_Start/AuthConfig.csで、この新しいクライアントを使用するようにクライアント設定を変更しました。

再度、Visual Studioでhttp port configurationsを変更するように提案してくれたJake Cに感謝します。これは私のためにトリックをしました。

31
Kevin Cruijssen

したがって、通常、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に入ってくる限り、これを提供することです。ウェブサイト。

9
Jake C

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ファイルに新しいエントリを作成します。

12
Mick Owen

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で実行中のすべてのプロジェクトを停止し、再起動します。

10

私はそれが少し古い投稿であることを知っています。しかし、私のソリューションは、少なくとも数分は誰かを助けることができます。実行しているWebサイトに複数のバインディングがある場合は、削除してください。 IPアドレスを1つだけ持っている:すべて未割り当ておよびHostNameが空白に設定されているenter image description here

1
Saifur

それはおそらく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をリッスンし、そこからローカルホストにデータをリダイレクトするもの

0
user942217

.vs/configフォルダーに移動し、applicationhost.configを開いて変更します

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

127.0.0.1へ

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

これも変更して、127.0.0.1を使用して直接実行します。

enter image description here

0
gorums