如何指定ASP.NET Core应用程序所在的端口?


191

WebHostBuilderMain入口点,我怎么可以指定它绑定到端口?

默认情况下,它使用5000。

请注意,此问题特定于新的ASP.NET Core API(当前在1.0.0-RC2中)。


10
launchSettings.jsonProperties文件夹检查。您可以在中更改端口launchUrl
奥列格

@Oleg,我在RC1的项目模板中剩下一些与IIS相关的设置。它们没有任何作用。
Drew Noakes

一个可以使用hosting.json(请参阅答案),这是RC1默认使用的,一个只需添加.AddJsonFile("hosting.json", optional: true)(请参阅此处
Oleg

1
使用配置堆栈似乎确实比单纯依赖VS特定的机制(launchSettings.json)好得多。
凯文·沙特

@DrewNoakes:我在UPDATED 2部分附加了旧答案。它描述了更改默认端口和使用或配置绑定的命令行的一些变体。hosting.json
奥列格

Answers:


236

在ASP.NET Core 3.1中,有四种主要方法可以指定自定义端口:

  • 使用命令行参数,通过以下方式启动.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
经过测试,效果很好,谢谢。@Oleg,您可以充实答案以显示所需的配置吗?将其放在配置文件中可能会很好。
Drew Noakes

4
可能UseUrls是@Oleg,但使用ASP.NET团队推荐的用于自托管方案的方法(显然,值本身不必进行硬编码)。就是说,我更新了答案,以提及您如何使用配置生成器来做到这一点。
凯文木屋

1
@Pinpoint:我发布了旧答案,可以在其中找到如何更改端口hosting.json。唯一要做的就是强制读取RC2中的信息(请参阅公告)。
奥列格

2
您需要以下软件包:using Microsoft.Extensions.Configuration.CommandLine;
学习者

87

您可以将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 '19

这不是在定义Kestrel绑定到IIS的端口(代理),而不是应用程序托管在IIS上的端口吗?
user12345 '19

@ user12345在IIS托管中,Kestrel使用动态端口绑定。
menxin

1
还可以与从exe运行web api的netcore 3.0配合使用,精采!!!
vidriduch

57

跟进答案以通过VS docker集成帮助任何这样做的人。我需要更改为端口8080才能在Google Appengine中使用“灵活”环境运行。

您将在Dockerfile中需要以下内容:

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

并且您还需要在docker-compose.yml中修改端口:

    ports:
      - "8080"

3
谢谢,我们可以以相同的方式在Windows命令promt中设置变量:set ASPNETCORE_URLS = http:// *:8080
Pavel Biryukov

1
这对我不起作用。您确定这就是您所做的全部修改吗?您是否需要对图像后记执行特殊的操作,或者对docker做任何操作?
史蒂夫

可能已经改变了很长时间,但是如果我记得那是我需要做的。
凯西

在VS Code中,您可以在launch.json的“ env”部分添加“ ASPNETCORE_URLS”:“ http:// +:8080”,以覆盖其他设置。
gorlok

31

替代解决方案是hosting.json在项目的根目录中使用a 。

{
  "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/zh-cn/aspnet/core/fundamentals/environments


1
也可以在appSettings.json中工作吗?
Paulo

不,它必须在中[ProjectRoot]/Properties/launchSettings.json,但美丽的是,它可以顺利运行。
Chaim Eliyah '19

5
这仅在开发期间有用,不适用于二进制文件。为了使用它,dotnet run您需要访问源代码。
rsenna '19

18

如果使用 dotnet run

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

完美的答案!在docker中工作。仅将“ localhost”替换为“ 0.0.0.0”
AndrewPt

17

在.net core 2.2之上,方法Main通过WebHost.CreateDefaultBuilder(args)支持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

或带有多个网址

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

您可以在项目目录中简单使用“ dotnet run --urls = 0.0.0.0:5001
oudi

12

当托管在Docker容器(对我来说是Linux版本)中时,您可能会收到“拒绝连接”消息。在这种情况下,您可以使用IP地址0.0.0.0(这意味着“此计算机上的所有IP地址”)而不是localhost环回来修复端口转发。

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部分添加到on的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或控制台,然后运行:

    dotnet YourProject.dll
  4. 在您的http:// localhost:5002上探索您的站点/ api


3

转到properties / 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.