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

Dre*_*kes 137 .net asp.net-core

当使用WebHostBuilder在一个Main入口点,我怎么可以指定它绑定到端口?

默认情况下,它使用5000.

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

Kév*_*let 174

你可以用UseUrls它:

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseUrls("http://localhost:5001/")
            .Build();

        host.Run();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用配置堆栈配置服务器地址.以下是如何使用命令行参数来传递所需的地址:

public class Program
{
    public static void Main(string[] args)
    {
        var configuration = new ConfigurationBuilder()
            .AddCommandLine(args)
            .Build();

        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseConfiguration(configuration)
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}

dotnet run --urls=http://localhost:5001/
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,直接在代码中使用固定URL并不是最佳选择. (31认同)
  • @Oleg可能,但是使用`UseUrls`是ASP.NET团队为自托管场景推荐的方法(显然,值本身并不需要硬编码).也就是说,我更新了我的答案,提到你如何使用配置构建器来做到这一点. (3认同)
  • 对此进行了测试,效果很好,谢谢.@Oleg,你能否得到一个答案,显示你需要什么配置?在配置文件中使用它可能会很好. (2认同)
  • @Pinpoint:我发布了 [旧答案](http://stackoverflow.com/a/34221690/315935),其中可以找到如何使用 `hosting.json` 更改端口。唯一需要做的就是强制读取 RC2 中的信息(参见 [公告](https://github.com/aspnet/Announcements/issues/174))。 (2认同)
  • 您将需要以下程序包:使用Microsoft.Extensions.Configuration.CommandLine;。 (2认同)
  • 该帖子应该更新... dotnet run --urls=http://localhost:5001/ 是您需要使用的。 (2认同)
  • 在“dotnet run”或“UseUrls”中对“localhost”进行硬编码是一个坏主意,因为一旦此代码离开开发人员的计算机,任何不包含 localhost 的请求都将被拒绝。这给我在 Kubernetes 带来了很大的痛苦。而是使用“http://*:5001”之类的字符串。 (2认同)

Cas*_*sey 47

通过VS docker集成帮助任何人这样做的后续回答.我需要更改到端口8080以使用google appengine中的"灵活"环境运行.

您需要在Dockerfile中使用以下内容:

ENV ASPNETCORE_URLS=http://+:8080
EXPOSE 8080
Run Code Online (Sandbox Code Playgroud)

你还需要修改docker-compose.yml中的端口:

    ports:
      - "8080"
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我们可以用同样的方式在 windows 命令提示符中设置变量:set ASPNETCORE_URLS=http://*:8080 (4认同)
  • 这对我不起作用。你确定这就是你修改的全部内容吗?您是否需要对图像后记或 docker 进行任何特殊处理? (2认同)

men*_*xin 45

您可以将Kestrel部分插入asp.net core 2.1+ appsettings.json文件中。

  "Kestrel": {
    "EndPoints": {
      "Http": {
        "Url": "http://0.0.0.0:5002"
      }
    }
  },
Run Code Online (Sandbox Code Playgroud)

  • 这实际上与通过`dotnet publish`生成的二进制文件一起使用。 (4认同)
  • 谢谢,正是我需要的:-)比UseUrls()更好。更多详细信息:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2 (2认同)
  • 还可以与 netcore 3.0 一起使用,从 exe 运行 Web api,太棒了!!! (2认同)

Den*_*nis 29

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

{
  "urls": "http://localhost:60000"
}
Run Code Online (Sandbox Code Playgroud)

然后在 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();
}
Run Code Online (Sandbox Code Playgroud)

  • 这不适合我.server.urls现在是url并确保你向project.json添加条目"publishOptions":{"include":["appsettings.json","web.config","wwwroot","hosting.json"]}, (7认同)
  • 我用正确的属性“ urls”更新了他的答案-谢谢@ManishJain (2认同)

Ran*_*dom 28

您可以指定托管网址,而无需对应用进行任何更改.

Properties/launchSettings.json在项目目录中创建一个文件,并用以下内容填充:

{
  "profiles": {
    "MyApp1-Dev": {
        "commandName": "Project",
        "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
        },
        "applicationUrl": "http://localhost:5001/"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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. 
Run Code Online (Sandbox Code Playgroud)

更多细节:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments

  • 这仅在开发期间有用,不适用于二进制文件。为了使用`dotnet run`,您需要访问源代码。 (3认同)

jab*_*ong 24

如果使用 dotnet run

dotnet run --urls="http://localhost:5001"
Run Code Online (Sandbox Code Playgroud)

  • 完美的答案!在码头工人工作。仅将“localhost”替换为“0.0.0.0” (3认同)

R. *_*sen 12

托管在docker容器中时(对我来说是Linux版本),您可能会收到"Connection Refused"消息.在这种情况下,您可以使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)


oud*_*udi 12

在.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>();
}
Run Code Online (Sandbox Code Playgroud)

您可以构建项目并bin像这样运行命令

dotnet <yours>.dll --urls=http://localhost:5001
Run Code Online (Sandbox Code Playgroud)

或带有多个网址

dotnet <yours>.dll --urls="http://localhost:5001,https://localhost:5002"
Run Code Online (Sandbox Code Playgroud)

  • 您可以在项目目录中简单地使用“dotnet run --urls=http://0.0.0.0:5001” (2认同)

Ern*_*est 11

在 .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>();
            });
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将以下基本配置添加到appsettings.json文件(Microsoft 文章中的更多配置选项):

    "Kestrel": {
        "EndPoints": {
            "Http": {
                "Url": "http://0.0.0.0:5002"
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在您的项目 Publish/Debug/Release binaries 文件夹中打开 CMD 或 Console 并运行:

    dotnet YourProject.dll
    
    Run Code Online (Sandbox Code Playgroud)
  4. 享受在您的http://localhost:5002浏览您的站点/api


Md.*_*fee 6

转到properties/launchSettings.json并找到您的应用程序名称,然后在其下找到applicationUrl。你会看到,它正在运行 localhost:5000,将其更改为你想要的任何值。然后运行 ​​dotnet run......万岁


Mwi*_*iza 5

或者,您可以通过命令行运行应用程序来指定端口。

只需运行命令:

dotnet run --server.urls http://localhost:5001
Run Code Online (Sandbox Code Playgroud)

注意:其中 5001 是您要运行的端口。