昨天在做一个获取ConfigMap的功能的时候,踩坑了,首先就是自己的无知,由于公司用的华为CCE,而我对K8S这一块也不了解,所以一开始就在华为的官方文档去找解决方案,于是一天的时间就过去了,自己也没啥收获。后来在同事的帮助下,才稍微了解了一点,实在是自己太菜,然后方向也找错了,白白浪费了一天时间。
首先就是ConfigMap的创建了,这里创建了一个连接Mysql的配置项
创建的ConfigMap需要进行挂载,之前挂载的路径一直不对,也找不到原因,然后读取配置项的配置数据的时候,就一直报错,
因为我在挂载路径的时候,配置的路径是 /config,也就是说将我创建的ConfigMap的data.json挂载到这里,但是为啥会出错呢,我一开始按照他的提示来修改路径
就这样改,但是这样改了之后出的问题就是,错误提示会在我的path前面再加一个/app ,这样就永远不对了,后来在一篇文章里面,得到了启发,将我的挂载路径改成了/app/config,
然后我的代码里面也改成这样
然后就成功了。
所以我是不是可以这样认为:由于dockerfile里面默认的工作目录是/app,所以我将我的ConfigMap挂载到/app/config下,在程序的path里面,/app可以省略,可以直接写成图中那样。然后挂载的路径会自动映射到程序中的指定文件,通过代码就可以读取data.json文件了。
对于以上总结,我总感觉有些地方不对,希望大佬在评论区指出。
在测试Webapi的时候,model的属性开头是大写的,但是测试的时候返回的json却是小写的。所以去查了一下。需要在startup.cs的ConfigureServices的services.AddControllers()方法后面添加一行代码。
services.AddControllers().AddNewtonsoftJson(options =>
{
// 忽略循环引用
// options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
// 不使用驼峰
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
// 设置时间格式
// options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
// 如字段为null值,该字段不会返回到前端
// options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});