ASP.NET Core 응용 프로그램이 호스팅되는 포트를 지정하는 방법은 무엇입니까?


197

사용하는 경우 WebHostBuilderA의 Main엔트리 포인트, 어떻게 그것을 결합하는 포트를 지정할 수 있습니다?

기본적으로 5000을 사용합니다.

이 질문은 새로운 ASP.NET Core API (현재 1.0.0-RC2)에만 해당됩니다.


10
폴더 launchSettings.json에서 검사하십시오 Properties. 에서 포트를 변경할 수 있습니다 launchUrl.
Oleg

@Oleg, RC1의 프로젝트 템플릿에서 남은 IIS 관련 설정이 있습니다. 그들은 아무런 영향을 미치지 않았다.
Drew Noakes 16:21에

하나는 RC1에서 기본적으로 사용되는 ( 답변hosting.json 참조)을 사용할 수 있고 추가하기 만하면됩니다 ( 여기 참조 ).AddJsonFile("hosting.json", optional: true)
Oleg

1
구성 스택을 사용하는 것은 순전히 VS 관련 메커니즘 (launchSettings.json)에 의존하는 것보다 훨씬 낫습니다.
는 Kévin 샬레

@DrewNoakes : UPDATED 2 부분으로 이전 답변 을 추가했습니다 . 기본 포트 변경 및 바인딩 구성을위한 명령 행 또는 명령 행 의 일부 변형에 대해 설명 합니다. hosting.json
Oleg

답변:


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을 사용하는 것이 최선의 선택은 아닙니다.
Oleg

3
이것을 테스트하고 감사합니다. @Oleg, 필요한 구성을 보여주는 답변을 살려 주시겠습니까? 이것을 구성 파일에 두는 것이 좋습니다.
Drew Noakes 16:21에

4
@Oleg 일 수도 있지만 UseUrlsASP.NET 팀이 자체 호스팅 시나리오에 권장하는 접근 방식을 사용하는 것 입니다 (값 자체는 하드 코딩 할 필요는 없습니다). 즉, 구성 작성기를 사용하여 어떻게 할 수 있는지 언급하기 위해 답변을 업데이트했습니다.
Kévin Chalet

1
@ Pinpoint : 이전 답변을 게시 했습니다 . 여기에서 포트를 변경하는 방법을 찾을 수 있습니다 hosting.json. RC2에서 정보를 읽는 것은 강제로 수행해야 합니다 (공지 참조 ).
Oleg

2
다음 패키지가 필요합니다.using Microsoft.Extensions.Configuration.CommandLine;
Learner

89

Kestrel 섹션을 asp.net core 2.1+ 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 (프록시)에 바인딩되어 있지 않습니까?
user12345

@ user12345 IIS 호스팅에서 Kestrel은 동적 포트 바인딩을 사용합니다.
menxin

1
또한 exe에서 웹 API를 실행하는 netcore 3.0과 함께 작동합니다.
vidriduch

58

VS 도커 통합 으로이 작업을 수행하는 사람을 돕기 위해 후속 조치를 취하십시오. Google appengine에서 "유연한"환경을 사용하려면 포트 8080으로 변경해야했습니다.

Dockerfile에 다음이 필요합니다.

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

docker-compose.yml에서 포트를 수정해야합니다.

    ports:
      - "8080"

3
감사합니다, 우리는 같은 방식으로 windows 명령 promt에서 변수를 설정할 수 있습니다 : set ASPNETCORE_URLS = http : // * : 8080
Pavel Biryukov

1
이것은 나를 위해 작동하지 않습니다. 이것이 모두 수정 한 것입니까? 이미지 후문이나 도커로 특별한 작업을 수행해야 했습니까?
Steve

너무 오래되어서 바뀌었을 수도 있지만, 그 사실을 기억한다면 내가해야 할 전부였습니다.
Casey

VS 코드에서 launch.json의 "env"섹션에 "ASPNETCORE_URLS": "http : // + : 8080"을 추가하여 다른 설정을 재정의 할 수 있습니다.
gorlok 2013 년

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 "publishOptions"에 항목을 추가하십시오 : ""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에서도 작업 하시겠습니까?
Paulo

아니요,에 있어야 [ProjectRoot]/Properties/launchSettings.json하지만 아름다운 것은 장애없이 작동합니다.
Chaim Eliyah

5
이것은 개발 중에 만 유용하며 바이너리에서는 작동하지 않습니다. 사용 dotnet run하려면 소스 코드에 액세스해야합니다.
rsenna

18

사용하는 경우 dotnet run

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

완벽한 답변! 도커에서 작동합니다. "localhost"만 "0.0.0.0"으로 대체
AndrewPt

17

.net core 2.2 이상에서 WebHost.CreateDefaultBuilder (args) 메소드 Main 지원 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:5001 '을 간단하게 사용할 수 있습니다
oudi

12

도커 컨테이너 (리눅스 버전)에서 호스팅되면 '연결 거부'메시지가 표시 될 수 있습니다. 이 경우 로컬 호스트 루프백 대신 "이 시스템의 모든 IP 주소"를 의미 하는 IP 주소 0.0.0.0 을 사용 하여 포트 전달을 수정할 수 있습니다.

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. 프로젝트 Publish / Debug / Release 바이너리 폴더에서 CMD 또는 콘솔을 열고 다음을 실행하십시오.

    dotnet YourProject.dll
  4. http : // localhost : 5002 에서 사이트 / api를 탐색하십시오 .


3

properties / launchSettings.json으로 이동하여 앱 이름을 찾고 아래에서 applicationUrl을 찾으십시오. localhost : 5000을 실행 중이며 원하는대로 변경하십시오. 그런 다음 닷넷 실행을 실행합니다. hurray


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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.