.net core 3.0踩坑日记

.net core 3.0 踩坑日记

三天前,老大要求把一个项目从java改到.net。因为没碰过.net,便开始了磕磕绊绊的踩坑之旅。

1. https问题。

在刚开始熟悉.net时,使用vs自动生成了一个webapi的项目,但是问题出现了,使用浏览器可以调用接口,但是postman调用就不会有返回。
后来发现vs会默认把为https配置勾选,vs会自己生成一个证书,但是postman不认这个证书。 后来将该配置项取消得以解决。

2. 使用.net core 3。

原先使用vs2017,但是查找的时候,怎么也找不到.net core 3,只有2.1,找了好久发现篇博客安装.NET Core 3.0预览版后VS项目目标框架中不显示的解决方法。 试过后发现不行,还是找不到。 后来换成vs2019得到解决。

3. .net core使用DI。

因为是从java项目转过来的,在java中习惯使用spring的我,第一时间想找到一个.net的依赖注入的库。 在这里先感谢一位b站up主 solenovex ,他的ASP.NET Core MVC 入门教程 (共9集)对我帮助很大。其中讲了一些启动时,默认的配置,其中就包括默认的DI。使用起来也很简单,在Startup.cs类的ConfigureServices方法中,将类添加到IOC容器中,使用时在构造方法中声名该类型即可注入。

// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    // 将WeatherForecastService添加到IOC容器中
    services.AddSingleton<WeatherForecastService>();
}


// WeatherForecastController.cs
private WeatherForecastService _weatherForecastService;
public WeatherForecastController(WeatherForecastService weatherForecastService)
{
    // 在构造函数中直接注入
    _weatherForecastService = weatherForecastService;
}

4. 分环境生效的配置文件

在Properties下的launchSettings.json中,有个叫ASPNETCORE_ENVIRONMENT的参数,这个参数控制生效的配置文件。
在项目启动时,默认会加载appsetting.jsonappsetting.{env}.json,结果取两个json合并后的结果,如果有key值相同,appsetting.{env}.json会覆盖appsetting.json。

5. 获取配置文件

获取appsetting.json中的配置信息,将想要的格式建好一个类之后,在Startup.cs中将该配置注册一下就可以在想要使用时将该配置注入进来。

// appsetting中的配置信息
/*
{
  "Build": {
    "Number":  1,
    "Env":  "Local"
  }
}
*/

// Startup.cs 中将想要注册的配置放进services中,并指明类型
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<Build>(Configuration.GetSection("Build"));
}

// WeatherForecastController.cs中在构造器中直接注入
private IOptions<Build> _buildConf;
public WeatherForecastController(ILogger<WeatherForecastController> logger, 
    WeatherForecastService weatherForecastService, 
    IOptions<Build> buildConf)
{
    _logger = logger;
    this.weatherForecastService = weatherForecastService;
    _buildConf = buildConf;
}

[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
    // 想要使用时,直接可以获取到一个强类型的对象,从中取配置即可
    Build buildConf = _buildConf.Value;
    string env = buildConf.Env;
    int number = buildConf.Number;
    Console.WriteLine("env : " + env + " buildNum : " + number);
    return weatherForecastService.GetForecasts();
}

// 输出结果:
// env : Local buildNum : 1

这种获取配置的方法要求必须有个实体类和配置文件对应,过于繁琐。 后续会寻找更方便的方法获取配置。


   转载规则


《.net core 3.0踩坑日记》 echi1995 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
数据库索引 数据库索引
索引是帮助mysql高效获取数据的排好序的数据结构 使用索引的几种数据结构 二叉树 红黑树 B树 B+树 * 首先记录一个数据结构可视化的网站.Data Structure Visualizations 1) 二叉树使用二叉树,对索引字段
下一篇 
在spring整个服务启动后做一些事 在spring整个服务启动后做一些事
起因: 因为服务器启动时,保存的数据和node层保存的数据不一致。虽然有定时同步的功能,但是启动后到第一次同步之间有段真空期,所有这个问题最后评估下来是要修复的。 经过思考后,决定服务器启动时,向redis里推送一条消息提示前端要同步数据
2019-10-23
  目录