Як вказати порт, на якому розміщено програму ASP.NET Core?


197

Як використовувати WebHostBuilderв Mainточці входу, як я можу вказати порт, який він прив'язує?

За замовчуванням він використовує 5000.

Зауважте, що це питання стосується нового API ASP.NET Core (зараз в 1.0.0-RC2).


10
вивчити launchSettings.jsonз Propertiesпапки. Ви можете змінити порт в launchUrl.
Олег

@Oleg, у мене були деякі параметри, пов'язані з IIS, від шаблону проекту RC1. Вони не мали жодного ефекту.
Дрю Ноакс

Можна скористатися hosting.json(див . Відповідь ), які використовувались за замовчуванням у RC1 і потрібно лише додати .AddJsonFile("hosting.json", optional: true)(див. Тут )
Олег

1
Використання стека конфігурації здається набагато кращим, ніж покладатися на суто специфічний для VS механізм (launchSettings.json).
Шале Kévin

@DrewNoakes: Я доклав мій старий відповідь з оновлений 2 частини. Він описує деякі зміни зміни порту за замовчуванням та використання hosting.jsonкомандного рядка для налаштування прив'язки.
Олег

Відповіді:


244

У ASP.NET Core 3.1 є 4 основних способи визначення користувальницького порту:

  • Використовуючи аргументи командного рядка, запустивши додаток .NET із --urls=[url]:
dotnet run --urls=http://localhost:5001/
  • Використовуючи appsettings.jsonдодавання Urlsвузла:
{
  "Urls": "http://localhost:5001"
}
  • Використовуючи змінні середовища, з ASPNETCORE_URLS=http://localhost:5001/.
  • Використовуючи UseUrls(), якщо ви хочете робити це програмно:
public static class Program
{
    public static void Main(string[] args) =>
        CreateHostBuilder(args).Build().Run();

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(builder =>
            {
                builder.UseStartup<Startup>();
                builder.UseUrls("http://localhost:5001/");
            });
}

Або якщо ви все ще використовуєте конструктор веб-хостів замість загального побудовника хостів:

public class Program
{
    public static void Main(string[] args) =>
        new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseUrls("http://localhost:5001/")
            .Build()
            .Run();
}

40
Використання фіксованих URL-адрес безпосередньо в коді - це не найкращий вибір.
Олег

3
Випробував це, і це працює добре, дякую. @ Олег, чи зможете ви деталізувати відповідь, яка показує, яка конфігурація вам потрібна? Це може бути добре мати це у конфігураційному файлі.
Дрю Ноакс

4
@Oleg, можливо, але використовувати UseUrlsпідхід, рекомендований командою ASP.NET для сценаріїв хостингу (очевидно, що саме значення не повинно бути жорстко кодоване). Втім, я оновив свою відповідь, щоб згадати, як ви могли це зробити за допомогою конструктора конфігурації.
Шале Кевін

1
@Pinpoint: Я розмістив стару відповідь , де можна знайти, як змінити порт за допомогою hosting.json. Єдине, що потрібно зробити - це змусити читати інформацію в RC2 (див . Анонс ).
Олег

2
Вам знадобиться такий пакет:using Microsoft.Extensions.Configuration.CommandLine;
Учень

89

Ви можете вставити розділ Kestrel у файл основної програми 2.1.0+ appsettings.json.

  "Kestrel": {
    "EndPoints": {
      "Http": {
        "Url": "http://0.0.0.0:5002"
      }
    }
  },

3
Дякую, просто те, що мені було потрібно :-) Краще за UseUrls (). Більш детально: docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/…
KTCO

7
ЦЕ фактично працює з двійковими файлами, що генеруються через dotnet publish.
rsenna

Хіба це не визначає порт Kestrel прив’язаний до IIS (проксі), а не до порта, на якому розміщено додаток у IIS?
користувач12345

@ user12345 У хостингу IIS Kestrel використовує динамічну прив'язку портів.
menxin

1
також працює з netcore 3.0 під керуванням веб-api від EXE, блискучим !!!
видруд

58

Слідкуйте за відповіддю, щоб допомогти всім, хто робить це з інтеграцією докер VS. Мені потрібно було перейти на порт 8080, щоб запустити, використовуючи "гнучку" середу в Google appengine.

У вашому Dockerfile вам знадобляться:

ENV ASPNETCORE_URLS=http://+:8080
EXPOSE 8080

і вам потрібно буде також змінити порт у docker-compose.yml:

    ports:
      - "8080"

3
Дякую, ми можемо встановити змінні у командному рядку Windows таким же чином: встановити ASPNETCORE_URLS = http: // *: 8080
Павло Бірюков

1
це не працює для мене. ти впевнений, що це все, що ти змінив? Чи потрібно було робити щось особливе до післязаписних зображень або щось із докер?
Стів

Це пройшло так довго, що, можливо, змінилося, але якщо я пригадаю, це було все, що мені потрібно було зробити.
Кейсі

у коді VS ви можете додати, що "ASPNETCORE_URLS": "http: // +: 8080" у розділі "env" сайта start.json, щоб змінити інші параметри.
горлок

31

Альтернативне рішення - використовувати hosting.jsonв корені проекту.

{
  "urls": "http://localhost:60000"
}

А потім в Program.cs

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("hosting.json", true)
        .Build();

    var host = new WebHostBuilder()
        .UseKestrel(options => options.AddServerHeader = false)
        .UseConfiguration(config)
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

7
Це не спрацювало для мене. server.urls тепер є URL-адресами та переконайтесь, що ви додали запис у project.json "pubOptions ": {" include ": [" appsettings.json "," web.config "," wwwroot "," hosting.json "]},
Manish Jain

3
Я оновив його відповідь правильним властивістю urls- дякую @ManishJain
TetraDev

30

Ви можете вказати URL хостингу без змін у вашій програмі.

Створіть Properties/launchSettings.jsonфайл у каталозі свого проекту та заповніть його приблизно таким чином:

{
  "profiles": {
    "MyApp1-Dev": {
        "commandName": "Project",
        "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
        },
        "applicationUrl": "http://localhost:5001/"
    }
  }
}

dotnet runкоманда повинна вибрати ваш launchSettings.jsonфайл і відобразити його в консолі:

C:\ProjectPath [master ≡]
λ  dotnet run
Using launch settings from C:\ProjectPath\Properties\launchSettings.json...
Hosting environment: Development
Content root path: C:\ProjectPath
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down. 

Детальніше: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments


1
Працювати і в appSettings.json?
Пауло

Ні, це повинно бути [ProjectRoot]/Properties/launchSettings.json, але прекрасна річ, вона працює без сучка.
Хаїм Елія

5
Це корисно лише під час розробки, не працює з бінарними файлами. для використання dotnet runвам потрібен доступ до вихідного коду.
rsenna

18

Якщо використовується dotnet run

dotnet run --urls="http://localhost:5001"

Ідеальна відповідь! Працює в докер. Замінено лише "localhost" на "0.0.0.0"
AndrewPt

17

Вище ядро ​​2.2. Метод Основні аргументи підтримки за допомогою WebHost.CreateDefaultBuilder (args)

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Ви можете створити свій проект і перейти до binвиконання такої команди

dotnet <yours>.dll --urls=http://localhost:5001

або з кількома URL-адресами

dotnet <yours>.dll --urls="http://localhost:5001,https://localhost:5002"

ви можете просто використовувати "dotnet run --urls = 0.0.0.0.100001 " в каталозі проектів
oudi

12

При розміщенні в контейнерах докера (для мене версія Linux) ви можете отримати повідомлення "З'єднання відмовлено". У цьому випадку ви можете використовувати IP-адресу 0.0.0.0, що означає "всі IP-адреси на цій машині", а не локальний зворотний зв'язок для виправлення переадресації порту.

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

        host.Run();
    }
}

5

Крім того, ви можете вказати порт, запустивши додаток через командний рядок.

Просто запустіть команду:

dotnet run --server.urls http://localhost:5001

Примітка: Де 5001 - порт, на якому потрібно працювати.


5

У .Net Core 3.1 просто дотримуйтесь Microsoft Doc, що це досить просто: kestrel-aspnetcore-3.1

Узагальнити:

  1. Додайте нижче розділ ConfigureServices до CreateDefaultBuilder Program.cs:

    // using Microsoft.Extensions.DependencyInjection;
    
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((context, services) =>
            {
                services.Configure<KestrelServerOptions>(
                    context.Configuration.GetSection("Kestrel"));
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
  2. Додайте нижче базовий конфігурацію у appsettings.jsonфайл (більше параметрів конфігурації у статті Microsoft):

    "Kestrel": {
        "EndPoints": {
            "Http": {
                "Url": "http://0.0.0.0:5002"
            }
        }
    }
  3. Відкрийте CMD або консоль у своєму папці Publish / Debug / Release binaries і запустіть:

    dotnet YourProject.dll
  4. Насолоджуйтесь вивченням свого сайту / api на своєму http: // localhost: 5002


3

Перейдіть до властивостей / launchSettings.json і знайдіть своє ім’я програми та під цим знайдіть applicationUrl. ви побачите, він працює localhost: 5000, змініть його на все, що завгодно. а потім запустити dotnet run ...... ура


0

Я виправив випуск порту в Net core 3.1, використовуючи наступне

У Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
        .ConfigureWebHost(x => x.UseUrls("https://localhost:4000", "http://localhost:4001"))
        .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
}

Ви можете отримати доступ до програми за допомогою

http://localhost:4000

https://localhost:4001
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.