web-dev-qa-db-fra.com

Mauvaise demande - Nom d'hôte non valide avec le projet Asp.net WebAPI dans Visual Studio 2013

J'exécute un projet webAPI très basique dans Visual Studio Pro 2013. Il fonctionne très bien sur localhost sur ma machine. J'essaie ensuite d'aller sur un navigateur à partir d'une autre machine et je vais: 57571 similaire à la façon dont je pourrais pointer vers Rails apps en mettant l'adresse IP du serveur suivie du numéro de port. J'obtiens ensuite Mauvaise demande - Nom d'hôte non valide Erreur HTTP 400. Le nom d'hôte de la demande n'est pas valide.

J'ai également répliqué cela en mettant deux machines Windows dans Azure. Un exécutant Visual Studio Pro 2013. J'exécute la même application et cela fonctionne bien localement. Ensuite, si j'essaie de le pointer d'un autre VM (sur le même réseau virtuel, je peux également envoyer une requête ping au serveur vm), je reçois toujours Mauvaise demande - Erreur HTTP 400 du nom d'hôte non valide. Le nom d'hôte de la demande n'est pas valide.

Attention, je ne me soucie pas d'un domian personnalisé, je veux juste pouvoir exécuter cette application à partir d'une autre machine en utilisant l'adresse IP. Est-ce possible? (si oui, des idées sur ce que je fais mal?) Voici ce que j'ai essayé Cela n'a pas fonctionné pour moiCela n'a pas non plus fonctionné

Comment savoir si Visual Studio fonctionne en tant qu'administrateur?

(J'utilise Windows Server 2012 R2 sur lequel Visual Studio est en cours d'exécution. J'ai désactivé le pare-feu sur les deux machines)

21
Frank Visaggio

Voici comment je l'ai fait fonctionner.

allez à C:\users\yourusername\Documents\IISExpress\config\applicationhost.config dans Visual Studio 201

Ajoutez la ligne suivante à applicationhost.config l'a fait fonctionner

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

où cela n'a pas fonctionné

<binding protocol="http" bindingInformation="<clientsIPaddress>:53676:*" />

Mise à jour Vs2015 et emplacement exact pour cette modification, le application.config sont décrits ci-dessous.

Le chemin d'accès au fichier est le suivant pour VS 2015.

C:\Users\\{YourUsername}\Documents\Visual Studio 2015\Projects\\{ThisSolutionName}\\.vs\config\applicationhost.config comme Daniel l'a mentionné.

Où dois-je mettre cela dans mon application.config?

Vous trouverez ci-dessous les sections parentes du fichier XML dans lesquelles vous trouverez les liaisons.

 <system.applicationHost>
           <sites>
              <site name="WebSite1" id="1" serverAutoStart="true">
                 <bindings>
                      <binding protocol="http" bindingInformation=":8080:localhost" />
               </bindings>
           </site>
      </sites>
 </system.applicationHost>

C'était à peu près la ligne 161 pour un nouveau projet qui n'a rien changé dans le applicationhost.config.

Ce que je ne savais pas, c'est ce que je pensais que l'adresse IP du client était, en fait, n'était pas vraie. La raison en est que j'avais une connexion VNet à VNet dans Azure et que la passerelle qui connecte les deux adresses IP réaffecte l'adresse IP des clients sur le réseau dans lequel mon application s'exécutait. J'ai donc dû rechercher la nouvelle adresse IP à laquelle il était mappé afin de ne pas utiliser le *:port:* stratégie

32
Frank Visaggio

Je ne peux pas commenter, mais je voulais répondre à @EthanKeiser

Visual Studio 2015 dispose d'un fichier de configuration distinct pour chaque solution que vous devrez mettre à jour conformément à la réponse acceptée. Ce fichier se trouve à:

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

Une autre chose qui m'a aidé est d'ajouter 127.0.0.1 à la reliure.

Donc, le résultat applicationhost.config ressemble à ça:

<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>

Et le fichier hosts est comme ceci:

127.0.0.1   localhost
127.0.0.1   sitename.com

Avant d'ajouter 127.0.0.1 il était OK dans le navigateur de naviguer comme https://localhost:44302, mais https://sitename.com:44302 a entraîné Bad Request.

De plus, si vous effectuez le "remplacement à chaud", assurez-vous de réinitialiser IIS. Vous pouvez le faire en cliquant avec le bouton droit sur le projet dans Visual Studio, en sélectionnant Unload project, puis modifiez applicationhost.config, enregistrez-le et Reload project en VS.

Soit dit en passant, n'oubliez pas de générer un certificat SSL pour votre projet. Je ne suis pas sûr que Visual Studio le fera pour vous.

Le port doit être compris entre 443 et 44399.

Voici comment vous pouvez générer SSL:

  1. Ouvrez Visual Studio Developers Tools en tant qu'administrateur
  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 (vous devrez obtenir appid à partir de cette étape)
  4. netsh http delete sslcert ipport=0.0.0.0:44302

Maintenant, ouvrez "Gérer les certificats informatiques", accédez à Personal et sélectionnez nouvellement créé. Vous aurez besoin de "Détails/Empreinte".

  1. netsh http add sslcert ipport=0.0.0.0:44302 certhash=<thumbprint> appid={id from step 3} (inclure les bracelets {})

J'espère que cela pourra aider.

0
Vlad