ASP.NET core 2.0 standalone: передача URL-адреса прослушивания через командную строку


Я пишу свою первую книгу. ASP.NET Core 2.0 web REST API приложение, следуя этот учебник. Однако мой конкретный вопрос касается кода, который вы получаете в программе.cs-файл при создании стандарта ASP.NET ядро веб-приложения в VS2017, это тот же код, описанный здесь:

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;

namespace WebApplication5
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}

У меня есть мое приложение, работающее нормально, когда я отлаживаю в VS2017, поэтому следующим шагом, который я сделал, было сделать его автономным приложением в соответствии с этим учебником, который отлично работает и дает мне исполняемый файл, который я могу запустить (я на windows 10 x64).

Проблема теперь в том, что этот исполняемый файл запускает веб-сервер на порту 5000, но я хотел бы иметь возможность настроить прослушивающие URL-адреса с помощью параметра командной строки.

Взглянув на приведенный выше код, мы видим, что args передается в WebHost.CreateDefaultBuilder(args), поэтому я предполагаю, что любые аргументы командной строки интерпретируются этой функцией, однако я не могу понять, что я должен передать в командной строке, чтобы заставить сервер слушать другой порт.

Я попробовал следующие варианты:
- MyApp.exe --UseUrls="http://*:5001"
- MyApp.exe --UseUrls=http://*:5001
- MyApp.exe --server.urls=http://*:5001
- MyApp.exe urls="http://*:5001"

И различные другие подобные комбинации... Приложение запускается, но продолжает слушать только на порту 5000.

Я начинаю думать, что пытаюсь сделать что-то невозможное :) так это действительно невозможно или я что-то упускаю?

1 6

1 ответ:

В linux я использую: ./MYAPP urls=http://*:8081 &, но для этого вам нужно изменить свой код. Попробуйте изменить код соответствующим образом:

    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args)
    {
        var configuration = new ConfigurationBuilder().AddCommandLine(args).Build();

        return WebHost.CreateDefaultBuilder(args)
            .UseConfiguration(configuration)
            .UseStartup<Startup>()
            .Build();
    }