Возможность отладки HTTP и HTTPS в Kestrel и .NET Core, как в .Net 4.x под IIS - PullRequest
0 голосов
/ 28 апреля 2019

Мне нужно отладить внешнюю аутентификацию, и для этого требуется HTTPS. В то же время для большинства внутренних запросов достаточно http. При размещении моего веб-приложения на IIS не возникало проблем с прослушиванием портов 80 и 443, но, как мне кажется, с ASP.NET Core, размещенным Kesterl, порт строго привязан к конкретной конфигурации в launchSettings.json, например:

"localCalls": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:40000"
    },
"externalIdentity": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "https://localhost:50000"
    }

Мне любопытно, возможно ли одновременное прослушивание на обоих портах без необходимости перезапуска в другой конфигурации для изменения протокола.

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Согласно документации вы можете определить конечные точки в одной конфигурации:

"localCalls": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development",
            "ASPNETCORE_URLS": "http://localhost:5000;https://localhost:5100"
      }
    }
1 голос
/ 28 апреля 2019

Asp.Net Core 2.1 и более поздних версий упрощает использование локального SSL. Когда вы создаете проект с использованием Visual Studio, он спрашивает вас, нужно ли вам включить SSL или нет. Если вы выбрали эту опцию перед созданием проекта, вы должны увидеть ваш файл launchSettings.json примерно так:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:61110",
      "sslPort": 44377
    }
  },
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "YourProjectName": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "https://localhost:5001;http://localhost:5000"
    }
  }
}

Раздел iisSettings предназначен для IISExpress с sslPort, определенным в данном случае 44377. Поэтому, когда ваш проект работает под IISExpress, он использует эти настройки

Раздел YourProjectName предназначен для пустельги. Вы можете видеть, что applicationUrl использует конечные точки http и https. Поэтому, когда вы делаете dotnet run, вы должны увидеть

Hosting environment: Development
Content root path: C:\users\...\YourProjectName
Now listening on: https://localhost:5001
Now listening on: http://localhost:5000

Кроме того, при методе Configure вы должны увидеть строку ниже, чтобы он автоматически перенаправлял HTTP на HTTPS

app.UseHttpsRedirection();

Если ваш launchSettings.json файл не похож на приведенный выше. Попробуйте изменить его в свойствах проекта и включить SSL, как на скриншоте ниже. При сохранении настроек файл launchSettings.json будет обновлен

enter image description here

Если вышеперечисленное не работает, попробуйте изменить файл launchSettings.json вручную. Я надеюсь, что это помогает

...