web-dev-qa-db-ja.com

不正な要求-Visual Studio 2013のAsp.net WebAPIプロジェクトで無効なホスト名

Visual Studio Pro 2013で非常に基本的なwebAPIプロジェクトを実行しています。マシンのlocalhostで正常に実行されます。次に、別のマシンからブラウザにアクセスして、Railsアプリにポート番号が続くサーバーのipaddressを入力することで、アプリを指す方法に似た:57571に移動します。その後、不正なリクエスト-無効なホスト名HTTPエラー400。リクエストのホスト名が無効です。

また、Azureに2台のWindowsマシンを配置して、これを複製しました。あるVisual Studio Pro 2013を実行しています。同じアプリケーションを実行すると、ローカルで正常に動作します。その後、別のVM(同じ仮想ネットワーク上で、サーバーvmにpingを送信することもできます)からそれをポイントしようとすると、まだBad Request-無効なホスト名HTTPエラー400。リクエストのホスト名が無効です。

気を付けてください、私はIPアドレスを使用して別のマシンからこのアプリを実行できるようにしたいだけです。これは可能ですか? (もしそうなら、私が間違っていることについてのアイデアはありますか?)ここに私が試したものがあります 私にとってはうまくいかなかったこれもうまくいきませんでした

Visual Studioが管理者として実行されていることを確認するにはどうすればよいですか?

(Visual Studioを実行しているWindows Server 2012 R2を使用しています。両方のマシンでファイアウォールをオフにしました)

21
Frank Visaggio

これがどのように機能するかを示しています。

go to C:\ users\yourusername\Documents\IISExpress\config\applicationhost.config in Visual Studio 201

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>

これは、applicationhost.config。で何も変更しなかった新しいプロジェクトではおよそ161行目でした

私が気付いていなかったのは、クライアントのIPアドレスが実際にはそうではないと思っていたことです。その理由は、AzureでVNetからVNetへの接続があり、2つのIPアドレスを接続しているゲートウェイが、アプリケーションが実行されていたネットワーク上のクライアントIPアドレスを再割り当てするためです。したがって、*:port:*戦略を使用しないためには、マップされた新しいIPアドレスを検索する必要がありました。

32
Frank Visaggio

コメントはできませんが、@ EthanKeiserに答えたいと思いました

Visual Studio 2015には、受け入れられた回答ごとに更新する必要があるソリューションごとに個別の構成ファイルがあります。このファイルは次の場所にあります。

C:\Users\\{UserName}\Documents\Visual Studio 2015\Projects\\{SolutionName}\\.vs\config\applicationhost.config
19
Daniel Vest

私を助けたもう一つのことは、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:44302Bad Requestになりました。

また、「ホットリプレースメント」を行う場合は、IISをリセットしていることを確認してください。 Visual Studioでプロジェクトを右クリックし、Unload projectを選択してからapplicationhost.configを変更して保存し、VSでReload projectを実行することで、これを行うことができます。

ところで、プロジェクトのSSL証明書を生成することを忘れないでください。 Visual Studioがあなたのためにそれを行うかどうかはわかりません。

ポートは443から44399の範囲にある必要があります。

SSLを生成する方法は次のとおりです。

  1. Visual Studio Developers Toolsを管理者として開きます
  2. 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
  3. netsh http show sslcert ipport=0.0.0.0:44302(このステップからappidを取得する必要があります)
  4. netsh http delete sslcert ipport=0.0.0.0:44302

ここで、「コンピューター証明書の管理」を開き、「個人」に移動して、新しく作成されたものを選択します。 「詳細/ Th印」が必要になります。

  1. netsh http add sslcert ipport=0.0.0.0:44302 certhash=<thumbprint> appid={id from step 3}(ブレースを含む{}

それが役に立てば幸いです。

0
Vlad