通常我们在 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:\Dev\Cnblogs.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();}
}

转载于:https://www.cnblogs.com/dudu/p/6233131.html

用hosting.json配置ASP.NET Core站点的Hosting环境相关推荐

  1. 用quot;hosting.jsonquot;配置ASP.NET Core站点的Hosting环境

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

  2. Cenos7 部署asp.net core站点

    系统版本 rpm -q centos-release --- centos-release-7-5.1804.el7.centos.x86_64 安装libicu yum install libunw ...

  3. 基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署

    最近在学习如何用 Docker 部署生产环境中的 ASP.NET Core 站点,作为一个 Docer 新手,从何处下手更容易入门呢?一开始就手写 Docker 配置文件(Docfile, docke ...

  4. DataProtection设置问题引起不同ASP.NET Core站点无法共享用户验证Cookie

    这是这两天ASP.NET Core迁移中遇到的一个问题.2个ASP.NET Core站点(对应于2个不同的ASP.NET Core Web应用程序),2个站点都可以登录,但在其中任1个站点登录后,在当 ...

  5. .NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上

    天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站点部署到了 Linux 服务器上,这是我们解决了在 .NET Core 上使用 EnyimMemc ...

  6. Consul作为配置中心,配置Asp.Net Core应用程序 依据key/value动态更新

    Consul作为配置中心,配置Asp.Net Core应用程序 依据key/value自动更新 https://github.com/wintoncode/Winton.Extensions.Conf ...

  7. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...

  8. ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core ...

  9. ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新建项目 - macOS 环境 对于任何语言和 ...

最新文章

  1. [Jobdu] 题目1504:把数组排成最小的数
  2. java树 JTree实例(可动态添加节点)
  3. win 7 mysql 1067_win7系统登陆MySQL服务出现1067错误的解决方法
  4. 最长不重复子串python_python经典算法题:无重复字符的最长子串
  5. html表单实现ajax登陆,node.js+jQuery实现用户登录注册AJAX交互
  6. 关于爬取网易云全部评论的一些疑问
  7. 国家开放大学2021春1076常微分方程题目
  8. mysql union 别名报错_浅析mysqlunion和unionall
  9. 左对齐 latex_初学者关于Latex的一些总结(持续更新中...)
  10. 【FPGA黑金开发板】Verilog HDL那些事儿--串口模块(十一)
  11. python中id是什么意思_什么是python的id函数
  12. python生成首尾相连的字符串
  13. su - root 切换失败
  14. java中的build类_30 Java设计模式系列-建造者(Build)模式
  15. 以太坊 2.0 中的验证者经济模型,Part-1
  16. 别嫌工资少,高薪资的标准你符合几条
  17. set name utd8_ml utd 8机器学习数据的最新生命
  18. 【autojs】Auto.js Pro安卓QQ语音红包秒抢挂免费脚本源码
  19. cmd 查看端口占用并且结束进程【建议收藏】
  20. 【TensorFlow基础函数】tf.concat的用法

热门文章

  1. C# 启动外部程序的几种方法
  2. 一个GDIPlus的Bug -- OutofMemory异常
  3. android mediaplayer状态机
  4. ATT汇编语言与GCC内嵌汇编简介
  5. AWS攻略——使用S3托管静态网页
  6. 【opencv】ubuntu14.04上编译opencv-4.0.1 + opencv_contrib-4.0.1
  7. 【leetcode】力扣刷题(1):两数之和(Go、Python)
  8. 前锋 php 杭州,前锋php培训
  9. cssbefore图片大小_两小时学会CSS-before after 伪元素
  10. 联机分析处理系统与联机事务处理系统的区别和联系_混合事务分析处理“HTAP”的技术要点分析...