2016-08-08 78 views
5

Ich habe die Zeile .UseUrls("http://*:5000") hinzugefügt, um Clients von anderen Hosts Zugriff auf die Web-API zu ermöglichen.Kann in Visual Studio nicht debuggen, nachdem die Portnummer geändert wurde?

public static void Main(string[] args) 
    { 
     var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .UseUrls("http://*:5000") // Added 
      .Build(); 

     host.Run(); 
    } 

jedoch Browser localhost:5000/api/Test zuzugreifen bekam den Fehler von HTTP/1.1 400 Bad Request? Soll die .UseUrls() nur für die Produktion kompiliert werden?

 
HTTP/1.1 400 Bad Request 
Date: Mon, 08 Aug 2016 21:42:30 GMT 
Content-Length: 0 
Server: Kestrel 

Die folgenden Meldungen werden beim Testen aus dem Visual Studio-Ausgabefenster kopiert.

Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 GET http://localhost:5000/api/Test

Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware:Error: 'MS-ASPNETCORE-TOKEN' does not match the expected pairing token '9bca37f2-7eda-4517-9f8f-60b6cc05cf01', request rejected.

Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 8.5976ms 400

+1

Können Sie 'UseUrls()' vor 'UseIISIntegration()' aufrufen. siehe http://stackoverflow.com/questions/37862475/specifying-the-url-port-that-a-asp-net-core-1-0-webapi-exe-should-use-in-progr –

+0

Bitte bestätigen Sie, wenn Sie haben dies innerhalb von IIS, IISExpress oder Standalone ausgeführt. –

+0

Ich habe die 'UseUrls()' vor 'UseIISIntegration()' verschoben und es funktioniert, wenn Debug den Namen der Anwendung ausführen. Es funktioniert immer noch nicht, wenn es mit IIS Express ausgeführt wird. – ca9163d9

Antwort

7

sollten Sie rufen zuerst .UseUrls() und/oder .UseConfig() und dann .UseIISIntegration().

Wenn OK unter IIS/IISExpress läuft, haben Sie 2 Prozesse. IIS hört auf dem gewünschten Port und Kestrel auf einem anderen. Ihre Anfragen sollten an IIS gehen und dann an Kestrel (mit der MS-ASPNETCORE-TOKEN) weitergeleitet werden.

Der Aufruf an .UseIISIntegration() verbirgt diese Zuordnung. Es ändert tatsächlich den Port in Ihrer App und setzt IIS auf den gewünschten Port. Aber es bricht, wenn Sie beide Methoden in falscher Reihenfolge aufrufen.

Sie erhalten diese Fehlermeldung, weil Kestrel erwartet, hinter IIS zu laufen, und erhielt eine direkte Anfrage. Und es bemerkte, dass, weil IIS war nicht da, um die MS-ASPNETCORE-TOKEN Header zu injizieren.

Diese issue dokumentiert das Problem und löst es möglicherweise in zukünftigen Versionen.

+1

Das hat es für mich gelöst. Ich hatte das gleiche Problem innerhalb einer Stunde nach OP. –