用"hosting.json"配置ASP.NET Core站点的Hosting环境
2016-12-29 15:18
986 查看
通常我们在 Prgram.cs 中使用硬编码的方式配置 ASP.NET Core 站点的 Hosting 环境,最常用的就是 .UseUrls() 。
但这种硬编码绑定端口的方式会给在同一台 Linux 服务器上部署多个站点造成麻烦,因为不同站点需要绑定不同的端口。除非你在开发时就已经约定好各个项目使用的端口,否则很容易在部署时遇到端口冲突问题,从而被迫修改代码。
如果能通过配置文件设置绑定的端口,这个问题就迎刃而解。ASP.NET Core 中有没有提供相应的解决之道呢?带着这个问题,今天签出 aspnet/Hosting 的源码浏览一番,在 SampleStartups 的 StartupFullControl.cs 中找到了答案:
原来可以通过 hosting.json 进行配置,下面实际体验一下。
首先创建一个 hosting.json 文件:
上面的配置中除了配置 server.urls ,也顺带配置了一下 environment (默认是Production)。
然后在 Program.cs 中使用 hosting.json 中的配置:
注意一定要把上面的 .UseUrls() 删除,不然 hosting.json 中的配置会被它覆盖。
另外还要注意,在 project.json 中除了在 "publishOptions" 中添加 "hosting.json" ,还要在 "buildOptions" -> "copyToOutput" 中添加 "hosting.json",不然运行时在 bin 文件夹会找不到 hosting.json 文件。
最后用 dotnet run 命令运行站点,体验一下实际效果。
【补充】ASP.NET Core 2.0 中的使用方法:
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(); } }
相关文章推荐
- 用"hosting.json"配置ASP.NET Core站点的Hosting环境
- .NET跨平台之旅:生产环境中第2个跑在Linux上的ASP.NET Core站点
- ASP.NET Core环境配置
- ASP.NET CORE入门之读取Json配置文件
- ASP.NET Core 指定环境发布(hosting environment)
- ASP.NET Core 运行原理解剖[2]-Hosting补充之配置介绍
- ASP.NET Core读取appsettings.json的配置
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- ASP.NET Core 2.0 : 五.服务是如何加载并运行的, Kestrel、配置与环境
- ASP.NET Core 运行原理解剖[2]:Hosting补充之配置介绍
- ASP.NET Core 在 JSON 文件中配置依赖注入
- ASP.NET Core 指定环境发布(hosting environment)
- 【无私分享:ASP.NET CORE 项目实战(第六章)】读取配置文件(一) appsettings.json
- 详解ASP.NET Core 在 JSON 文件中配置依赖注入
- ASP.NET Core环境变量和启动设置的配置教程
- 新系统配置ASP.NET Core 站点
- ASP.NET Core 指定环境发布(hosting environment)
- [转]ASP.NET Core 指定环境发布(hosting environment)
- ASP.Net Core 2.0 获取Json和Xml格式的配置信息
- ASP.NET CORE入门之读取Json配置文件