用"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:\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();
}
}
【更新】从 .NET Core 2.1 开始,可以直接写在 appsettings.json 中。
"Kestrel": {
  "EndPoints": {
    "Http": {
      "Url": "http://*:30080"
    }
  }
}
用"hosting.json"配置ASP.NET Core站点的Hosting环境的更多相关文章
- 以self-contained方式在Linux上部署ASP.NET Core站点
		
今天准备将一个在Windows上用VS2015开发的ASP.NET Core程序部署到阿里云Linux服务器上,部署时发现这台服务器是内网服务器,无法直接安装.NET Core SDK,于是想到尝试用 ...
 - dotnet run是如何启动asp.net core站点的
		
在曾经的 asp.net 5 过渡时期,运行 asp.net 5 站点的命令是dnx web:在如今即将到来的 asp.net core 时代,运行 asp.net core 站点的命令是dotnet ...
 - .NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点
		
在将“.NET跨平台之旅”示例站点 about.cnblogs.com 从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 (博文链接)之后,我们有一个难以抗拒的冲动 —— 体验 ...
 - 在Linux上用supervisor运行ASP.NET Core站点的一个坑
		
将一个ASP.NET Core站点在Linux服务器上以self-contained部署方式发布出来后,直接在终端上运行下面的命令,站点可以正常运行. /data/AboutUs/bin/Debug/ ...
 - Cenos7 部署asp.net core站点
		
系统版本 rpm -q centos-release --- centos-release--5.1804.el7.centos.x86_64 安装libicu yum install libunwi ...
 - 基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署
		
最近在学习如何用 Docker 部署生产环境中的 ASP.NET Core 站点,作为一个 Docer 新手,从何处下手更容易入门呢?一开始就手写 Docker 配置文件(Docfile, docke ...
 - ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程
		
原文:ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 配置 上一章节我们简单介绍了下 Id ...
 - .NET跨平台之旅:将QPS 100左右的ASP.NET Core站点部署到Linux服务器上
		
今天下午我们将生产环境中一个单台服务器 QPS(每秒请求数)在100左右的 ASP.NET Core 站点部署到了 Linux 服务器上,这是我们解决了在 .NET Core 上使用 EnyimMem ...
 - 将asp.net core站点发布到IIS上遇到的问题
		
今天第一次将整个 asp.net core 站点发布到 IIS 上,以前都是发布到 Linux 服务器上. 开始使用 dotnet publish -c release 命令发布,用浏览器访问站点时出 ...
 
随机推荐
- 二.TimesTen原理及应用场景
			
声明:本文章转自麻袋爸爸 一,TimesTen应用场景 在谈论TimesTen内存数据库应用场景之前,我们先来介绍一下什么是内存数据库,及其工作原理吧.内存数据库,顾名思义就是将数据存放在内存中,并通 ...
 - IntelliJ Idea 常用快捷键 列表
			
1. -----------自动代码-------- 常用的有fori/sout/psvm+Tab即可生成循环.System.out.main方法等boilerplate样板代码 例如要输入for(U ...
 - Oracle并发与多版本控制
			
1.什么是并发 2.事务隔离级别 2.1 READ UNCOMMITTED 2.2 READ COMMITTED 2.3 REPETABLE READ 2.4 SERIALIZ ...
 - 一个windows下的ddos样本
			
一个windows下的ddos样本. 加载器 程序运行之后会在临时目录释放出一个256_res.tmp的文件 之后将该文件移动至system32目录下,以rasmedia.dll命名. 删除原文件. ...
 - 布局包含Image和Title的UIButton
			
UIButton中的titleEdgeInsets和imageEdgeInsets可以管理button中image和title的布局. 如果对其理解不够深入,用纯数字进行布局管理,经过不断的调试,还是 ...
 - url中的特殊字符问题
			
在 使用url进行参数传递时,经常会传递一些中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误.在有些传递页面使用GB2312, 而在接收页面使用UTF8,这样接收到的参数就可能会 ...
 - 【字符串匹配】KMP算法和next数组的c/c++实现
			
KMP算法基本思想有许多博客都写到了,写得也十分形象,不懂得可以参考下面的传送门,我就不解释基本思想了.本文主要给出KMP算法及next数组的计算方法(主要是很多网上的代码本人(相信应该是许多人吧)看 ...
 - WPF menu
			
MenuMenu的样式很简单,就是顶部的那个框,如下图 而其中的文字“文件”“图形”...是属于MenuItem的,要灵活使用MenuItem,就需要了解MenuItem.Role的作用 TopLev ...
 - js动画
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - jsoup获取图片示例
			
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...