用quot;hosting.jsonquot;配置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.

原文地址:http://www.cnblogs.com/dudu/p/6233131.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员常用网站收藏[定期更新]——csdn博客

网站收藏【定期更新】 资源类1.开源中国社区3.CodePlayer专注于编程技术分享4.源码之家5.阿里云6.免费logo在线制作, 标志设计, 公司logo设计7.搜素材 - 站酷 (ZCOOL)8.站长素材97.建站资源_伊思娜资源网-2014国内最全|免费空间|域名|网赚|免费cmcc|网络电话|网站优化|服装搭配…

No primary or default constructor found for interface java.util.List

https://blog.csdn.net/qq_39723363/article/details/84379685 springboot No primary or default constructor found for interface java.util.List 夏天吹雪 2018-11-23 11:31:12 67570 收藏 6 分类专栏&#xff1a; 工作随记 版权 RequestParam(value "content&…

关于分布式一致性的探究

转载自 关于分布式一致性的探究 随着大型网站的各种高并发访问、海量数据处理等场景越来越多&#xff0c;如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题&#xff0c;大型网站的架构也在不断发展。提高大型网站的高可用架构&#…

论:开发者信仰之“天下IT是一家“(Java .NET篇)

比尔盖茨公认的IT界领军人物&#xff0c;打造了辉煌一时的PC时代。 2008年&#xff0c;史蒂夫鲍尔默接替了盖茨的工作&#xff0c;成为微软公司的总裁。 2013年他与微软做了最后的道别。 2013年以后&#xff0c;我才真正看到了微软的变化。尤其是它的“云优先&#xff0c;移动优…

使用加密工具类进行有效的字符串加密——CSDN博客

加密&#xff0c;分为多种&#xff0c;使用场景也是很多的&#xff0c;最多常用的加密方式就是MD5加密&#xff0c;另一种方式就是Base64加密&#xff0c;我这只说说Base64加密&#xff0c;我们使用的工具类&#xff1a;常用的字符串加密解密工具类 下面我上一下代码&#…

配置高性能ElasticSearch集群的9个小贴士

Loggly服务底层的很多核心功能都使用了ElasticSearch作为搜索引擎。就像Jon Gifford&#xff08;译者注&#xff1a;Loggly博客作者之一&#xff09;在他近期关于“ElasticSearch vs Solr”的文章中所述&#xff0c;日志管理在搜索技术方面产生一些粗暴的需求&#xff0c;坚持下…

调用阿里云接口实现短信消息的发送源码——CSDN博客

在调用阿里云接口之前首先需要购买接口&#xff0c;获得accessKeySecret&#xff0c;然后使用下列代码就可以直接调用了&#xff01;&#xff01; /** * Title: TestPhoneVerification.java * Package org.test * Description: TODO该方法的主要作用&#xff1a; * author A1…

MyBatis-Plus Wrapper条件构造器查询大全

https://blog.csdn.net/weixin_38111957/article/details/91447509 MyBatis-Plus Wrapper条件构造器查询大全 IT贱男 2019-06-11 16:50:44 36133 收藏 66 分类专栏&#xff1a; Mybatis-Plus 版权 码农必备linux技能 本专栏主要从系统安装、入门命令讲解&#xff0c;会不…

使用阿里云身份证扫描识别接口案例——CSDN博客

/*** * Title: idcard* Description: 该方法的主要作用&#xff1a;扫描身份证* param return 设定文件 * return 返回类型&#xff1a;String * throws*/public void idcard(){String host "https://dm-51.data.aliyun.com";String path "/rest/160601/…

.NET异常设计原则

异常是使用.NET时必然会遇到的问题&#xff0c;但是&#xff0c;有太多的开发人员没有从API设计的角度考虑这个问题。在大部分工作中&#xff0c;他们自始至终都知道需要捕获什么异常以及哪些异常需要写入全局日志。如果你设计了可以让你正确使用异常的API&#xff0c;则可以显…

深入理解分布式系统的2PC和3PC

转载自 深入理解分布式系统的2PC和3PC 关注我的博客&#xff08;http://www.hollischuang.com&#xff09;的人可能都知道&#xff0c;我之前写过一篇文章专门介绍了一下2PC和3PC&#xff08;详见&#xff1a;关于分布式事务、两阶段提交协议、三阶提交协议&#xff09;。上一篇…

java 百度经纬度 转换为 高德经纬度 谷歌

https://lbs.amap.com/api/webservice/guide/api/convert/#convert https://restapi.amap.com/v3/assistant/coordinate/convert?locations116.481499,39.990475&coordsysgps&outputxml&key<用户的key> https://console.amap.com/dev/key/app https://conso…

方法的重写VS重载

方法的重写&#xff08;override&#xff09; 方法的重写 子类从父类中继承方法&#xff0c;有时&#xff0c;子类需要修改父类中定义的方法的实现&#xff0c;这称做方法的重写(method overriding)。“重写”的概念与“重载”相似&#xff0c;它们均是Java“多态”的技术之一&…

使用阿里云火车票查询接口案例——CSDN博客

首先我们需要一个实体类&#xff0c;专门放火车票信息的封装类&#xff0c;实体类&#xff1a; Train.java: /** * Title: Train.java * Package cn.bdqn.guanMingSys.entity * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * dat…

权衡微服务

很多开发团队已经认识到 微服务架构比单体架构更优越。但是也有其他团队感觉到这是一种消弱生产力的负担。就像任何软件架构&#xff0c;微服务架构同样有利弊。为了能做出一个明智的选择&#xff0c;你必须了解这些应用并将它们运用到你特定的环境中。 微服务的优势 具有边界的…

使用IDM下载,不适用默认浏览器下载

google浏览器是不能够安装的除非有v*p*n&#xff08;&#xff09; Firefox浏览器可以安装js脚本 推荐使用 1 google 扩展 IDMan628 扩展程序里面加 IDMGCExt.crx 2 扩展Tampermonkey 加Tampermonkey.crx 3 点击Tampermonkey 的仪表盘 右上角加按钮 百度网盘直接下载助手…

深入分析事务的隔离级别

转载自 [中级]深入分析事务的隔离级别 本文详细介绍四种事务隔离级别&#xff0c;并通过举例的方式说明不同的级别能解决什么样的读现象。并且介绍了在关系型数据库中不同的隔离级别的实现原理。 在DBMS中&#xff0c;事务保证了一个操作序列可以全部都执行或者全部都不执行&am…