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.