Як вказати порт, на якому розміщено програму 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.