2016-08-08 5 views
5

Я добавил строку .UseUrls("http://*:5000"), чтобы клиенты из других хостов обращались к веб-ави.Не удается отладить в Visual Studio после изменения номера порта?

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

     host.Run(); 
    } 

Однако, используя браузер для доступа localhost:5000/api/Test получил ошибку HTTP/1.1 400 Bad Request? Должен ли .UseUrls() быть скомпилирован только для производства?

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

Следующие сообщения копируются из окна вывода Visual Studio при тестировании.

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

Можно ли использовать 'UseUrls()' перед 'UseIISIntegration()'. см. http://stackoverflow.com/questions/37862475/specifying-the-url-port-that-a-asp-net-core-1-0-webapi-exe-should-use-in-progr –

+0

Пожалуйста, подтвердите, если вы запускали это внутри IIS, IISExpress или автономно. –

+0

Я переместил 'UseUrls()' перед 'UseIISIntegration()' и работает, когда debug запускает имя приложения. Это все еще не работает, если вы запускаете с помощью IIS express. – ca9163d9

ответ

7

Вы должны вызвать первый .UseUrls() и/или .UseConfig() и затем .UseIISIntegration().

При запуске ok под IIS/IISExpress вы получаете 2 процесса. IIS прослушивает желаемый порт и Kestrel на другом. Ваши запросы должны отправляться в IIS, а затем отправляться в Kestrel (с MS-ASPNETCORE-TOKEN).

Звонок в .UseIISIntegration() скрывает это отображение. Он фактически изменяет порт в вашем приложении и устанавливает IIS на нужном порту. Но он ломается, если вы вызываете оба метода в неправильном порядке.

Вы получаете это сообщение об ошибке, потому что Kestrel должен работать за IIS и получил прямой запрос. И он заметил, что, поскольку IIS не было там, чтобы ввести заголовок MS-ASPNETCORE-TOKEN.

Этот issue документирует проблему и может ее решить в будущих выпусках.

+1

Это решило это для меня. У меня была такая же проблема в течение часа оп. –

Смежные вопросы