asp.net core 中灵活的配置方式

简介:

一、监听地址及端口配置

1,命令行方式

asp.net core系统通过命令行方式启动,使用的命令如下:

dotnet run

上面的命令直接在源代码目录下执行,便可以编译程序并运行。那对于已经发布好的程序,就不能使用上面的指令了,应该使用下面的指令:

dotnet 程序集文件名(程序集文件名就是程序发布后生成的dll文件)

上面两个指令都能够启动应用程序。程序启动后,默认监听地址及端口是http://localhost:5000。但是程序发布后,肯定不会使用默认的地址及端口,那如果要想让启动时监听其他的地址或域名怎么办?答案是使用--urls参数,具体指令格式如下:

dotnet run --urls="http://域名:端口号" 

如果想设置多个域名,可以使用分号分隔。

程序默认情况下是不支持参数传递的,我们需要对程序进行一些配置。首先需要引入Microsoft.Extensions.Configuration.CommandLine库文件,然后在main方法中添加commandline支持,具体代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   public  class  Program
     {
         public  static  void  Main( string [] args)
         {
             var  config =  new  ConfigurationBuilder()
               .AddCommandLine(args) //增加commandline支持
               .Build();
 
             var  host =  new  WebHostBuilder()
                 .UseConfiguration(config)
                 .UseKestrel()
                 .UseContentRoot(Directory.GetCurrentDirectory())
                 .UseIISIntegration()
                 .UseStartup<Startup>()
                 .UseApplicationInsights()
                 .Build();
 
             host.Run();
         }
     }

  经过配置后就可以使用上面的指令传递参数了

2,配置文件

asp.net core配置信息也可以放置在一个配置文件中,系统启动时进行加载配置文件内容,来影响程序启动所需要的环境参数。我们来看一下具体操作过程。

首先我们需要引入一个库文件"Microsoft.Extensions.Configuration.Json",然后在main方法中引入配置文件路径信息,具体代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
     public  class  Program
     {
         public  static  void  Main( string [] args)
         {
             var  config =  new  ConfigurationBuilder()
                 .SetBasePath(Directory.GetCurrentDirectory())
                 .AddJsonFile( "hosting.json" )
                 .Build();
 
             var  host =  new  WebHostBuilder()
                 .UseConfiguration(config)
                 .UseKestrel()
                 .UseContentRoot(Directory.GetCurrentDirectory())
                 .UseIISIntegration()
                 .UseStartup<Startup>()
                 .UseApplicationInsights()
                 .Build();
 
             host.Run();
         }
     }

  

  

 通过上面方式,我们就增加了一个外部的hosting.json配置文件,在里面我们可以增加监听地址信息,内容如下:

 

?
1
2
3
{
   "server.urls" "http://*:5001"
}

  

二、运行环境配置

在进行项目开发时,常常要求开发环境,测试环境及正式环境的分离,并且不同环境运行的参数都是不一样的,比如监听地址,数据库连接信息等。当然我们把配置信息保存到一个文件中,每次发布的时候,可以先修改配置文件的内容,然后再进行程序发布,这样操作起来无疑是很麻烦,每次发布都得先确定对应的环境,然后修改配置信息,如果需要同时发布多个环境版本,那就得进行多次操作。

asp.net core 其实已经考虑到了这样的场景,我们可以先看下下面的代码:

?
1
2
3
4
5
6
7
8
9
  public  Startup(IHostingEnvironment env)
         {
             var  builder =  new  ConfigurationBuilder()
                 .SetBasePath(env.ContentRootPath)
                 .AddJsonFile( "appsettings.json" , optional:  false , reloadOnChange:  true )
                 .AddJsonFile($ "appsettings.{env.EnvironmentName}.json" , optional:  true )
                 .AddEnvironmentVariables();
             Configuration = builder.Build();
         }

 上面的代码是出现在startup.cs文件中,里面首先使用AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)加载appsettings配置文件,这个文件里可以放置所有环境共享的信息,后面有一句AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true),env.EnvironmentName其实就是系统环境,根据启动时设置的EnvironmentName不同,可以加载对应的配置文件内容。

 现在的问题是如何去指定这个EnvironmentName?

1,通过命令行指定environment

在执行dotnet run之前,可以先执行以下下面的指令:

set ASPNETCORE_ENVIRONMENT= 环境名称,注意这里没有引号,直接把环境名称写成具体的值即可,比如 set ASPNETCORE_ENVIRONMNET=development

然后再执行dotnet run指令,这样当前运行就会按照set指令中设置的环境进行运行

2,直接给dotnet run指令传递具体参数

先看直接的执行效果:dotnet run --ASPNETCORE_ENVIRONMENT=development

具体做法:引入Microsoft.Extensions.Configuration.CommandLine,Microsoft.Extensions.Configuration.EnvironmentVariables库文件,然后在main方法中增加环境参数的支持,具体代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
     public  class  Program
     {
         public  static  void  Main( string [] args)
         {
             var  config =  new  ConfigurationBuilder()
                 .AddEnvironmentVariables()
                 .AddCommandLine(args)
                 .SetBasePath(Directory.GetCurrentDirectory())
                 .AddJsonFile( "hosting.json" )
                 .Build();
 
             var  host =  new  WebHostBuilder()
                 .UseEnvironment(config[ "ASPNETCORE_ENVIRONMENT" ])
                 .UseConfiguration(config)
                 .UseKestrel()
                 .UseContentRoot(Directory.GetCurrentDirectory())
                 .UseIISIntegration()
                 .UseStartup<Startup>()
                 .UseApplicationInsights()
                 .Build();
 
             host.Run();
         }
     }

 关键是AddEnvironmentVariables(),UseEnvironment(config["ASPNETCORE_ENVIRONMENT"])两处的处理。这样我们就可以在dotnet run指令后面增加对应的环境参数。 

 

本文转自 bxst 51CTO博客,原文链接:http://blog.51cto.com/13013670/1943998


相关文章
|
2月前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
|
2月前
mcr.microsoft.com/dotnet/core/aspnet:2.1安装libgdiplus
mcr.microsoft.com/dotnet/core/aspnet:2.1安装libgdiplus
30 1
|
3月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
3月前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
100 3
|
2月前
|
开发框架 JavaScript 前端开发
一个适用于 ASP.NET Core 的轻量级插件框架
一个适用于 ASP.NET Core 的轻量级插件框架
|
3月前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
|
4月前
|
开发框架 JSON 安全
分享一个 .NET Core 使用选项方式读取配置内容的详细例子
分享一个 .NET Core 使用选项方式读取配置内容的详细例子
|
4月前
|
开发框架 监控 .NET
开发者的革新利器:ASP.NET Core实战指南,构建未来Web应用的高效之道
【8月更文挑战第28天】本文探讨了如何利用ASP.NET Core构建高效、可扩展的Web应用。ASP.NET Core是一个开源、跨平台的框架,具有依赖注入、配置管理等特性。文章详细介绍了项目结构规划、依赖注入配置、中间件使用及性能优化方法,并讨论了安全性、可扩展性以及容器化的重要性。通过这些技术要点,开发者能够快速构建出符合现代Web应用需求的应用程序。
60 0
|
4月前
|
缓存 数据库连接 API
Entity Framework Core——.NET 领域的 ORM 利器,深度剖析其最佳实践之路
【8月更文挑战第28天】在软件开发领域,高效的数据访问与管理至关重要。Entity Framework Core(EF Core)作为一款强大的对象关系映射(ORM)工具,在 .NET 开发中扮演着重要角色。本文通过在线书店应用案例,展示了 EF Core 的核心特性和优势。我们定义了 `Book` 实体类及其属性,并通过 `BookStoreContext` 数据库上下文配置了数据库连接。EF Core 提供了简洁的 API,支持数据的查询、插入、更新和删除操作。
118 0
|
4月前
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn