zoukankan      html  css  js  c++  java
  • 用"hosting.json"配置ASP.NET Core站点的Hosting环境

    通常我们在 Prgram.cs 中使用硬编码的方式配置 ASP.NET Core 站点的 Hosting 环境,最常用的就是 .UseUrls() 。

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

    但这种硬编码绑定端口的方式会给在同一台 Linux 服务器上部署多个站点造成麻烦,因为不同站点需要绑定不同的端口。除非你在开发时就已经约定好各个项目使用的端口,否则很容易在部署时遇到端口冲突问题,从而被迫修改代码。

    如果能通过配置文件设置绑定的端口,这个问题就迎刃而解。ASP.NET Core 中有没有提供相应的解决之道呢?带着这个问题,今天签出 aspnet/Hosting 的源码浏览一番,在 SampleStartups 的 StartupFullControl.cs 中找到了答案:

    var config = new ConfigurationBuilder()
        .AddCommandLine(args)
        .AddEnvironmentVariables(prefix: "ASPNETCORE_")
        .AddJsonFile("hosting.json", optional: true)
        .Build();
    
    var host = new WebHostBuilder()
        .UseConfiguration(config)

    原来可以通过 hosting.json 进行配置,下面实际体验一下。

    首先创建一个 hosting.json 文件:

    {
      "server.urls": "http://*:5000;http://*:8001",
      "environment": "Development"
    }

    上面的配置中除了配置 server.urls ,也顺带配置了一下 environment (默认是Production)。

    然后在 Program.cs 中使用 hosting.json 中的配置:

    public class Program
    {
        public static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
                .AddJsonFile("hosting.json", optional: true)
                .Build();
    
            var host = new WebHostBuilder()
                .UseUrls("http://*:5000")
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseStartup<Startup>()
                .UseConfiguration(config)
                .Build();
    
            host.Run();
        }
    }

    注意一定要把上面的 .UseUrls() 删除,不然 hosting.json 中的配置会被它覆盖。

    另外还要注意,在 project.json 中除了在 "publishOptions" 中添加 "hosting.json" ,还要在 "buildOptions" -> "copyToOutput" 中添加 "hosting.json",不然运行时在 bin 文件夹会找不到 hosting.json 文件。

    "buildOptions": {
      "emitEntryPoint": true,
      "preserveCompilationContext": true,
      "copyToOutput": "hosting.json"
    },
    "publishOptions": {
      "include": [
        "hosting.json"
      ]
    }

    最后用 dotnet run 命令运行站点,体验一下实际效果。

    Hosting environment: Development
    Content root path: C:DevCnblogs.WebDemo
    Now listening on: http://*:5000
    Now listening on: http://*:8001
    Application started. Press Ctrl+C to shut down.

    【补充】ASP.NET Core 2.0 中的使用方法:

    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }
    
        public static IWebHost BuildWebHost(string[] args)
        {
            var config = new ConfigurationBuilder()
            .AddJsonFile("hosting.json", optional: true)
            .AddCommandLine(args)
            .Build();
    
            return WebHost.CreateDefaultBuilder(args)                
                .UseConfiguration(config)
                .UseStartup<Startup>()
                .Build();
        }
    }

    【更新】从 .NET Core 2.1 开始,可以直接写在 appsettings.json 中。

    "Kestrel": {
      "EndPoints": {
        "Http": {
          "Url": "http://*:30080"
        }
      }
    }
  • 相关阅读:
    Citrix的一个安装问题(The Configuration file(s) for this site could not be read )
    MDOP(1) : AppV 命令行刷新
    BPC (9) SAP BI & BPC 安装 : 一个外行眼里的千奇百怪 (4)
    BPC (12) 服务账号密码重置(1)
    BPC (10) 二种平台的安装
    BPC (9) SAP BI & BPC 安装 : 一个外行眼里的千奇百怪 (3)
    BPC (11) – NW BPC 7.04 三个Bug
    一本30多年前的桥牌书
    使用XCode联机调试你的iOS应用
    $_SERVER 数据的一系列数据
  • 原文地址:https://www.cnblogs.com/dudu/p/6233131.html
Copyright © 2011-2022 走看看