【发布时间】:2017-05-06 16:22:15
【问题描述】:
我在使用 Microsoft.Extensions.Configuration 绑定包含带有冒号 : 的键的字典时遇到问题。
我做了一个例子,它有一个字典“GoodErrorMappings”,它的键中不包含任何冒号。这些映射正确。
我创建了另一个字典“BadErrorMappings”,键中有一个冒号。在看到字典键中的第一个冒号后,该字典似乎没有正确映射。
我快速查看了源代码,但看不到一个明显的方法来覆盖冒号作为分隔符。
任何帮助将不胜感激。
多科: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration
程序集版本: “Microsoft.NETCore.App” “1.1.0”
C# 代码:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
namespace OptionsTest
{
public class Program
{
public static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var config = builder.Build();
var services = new ServiceCollection().AddOptions();
services.Configure<ApiConfig>(x => config.GetSection("ApiConfig").Bind(x));
var apiConfig = services.BuildServiceProvider().GetService<IOptions<ApiConfig>>().Value;
Debug.WriteLine(string.Format("\r\nGoodErrorMappings: {0}", JsonConvert.SerializeObject(apiConfig.GoodErrorMappings, Formatting.Indented)));
Debug.WriteLine(string.Format("\r\nBadErrorMappings: {0}", JsonConvert.SerializeObject(apiConfig.BadErrorMappings, Formatting.Indented)));
Console.ReadLine();
}
}
public class ApiConfig
{
public Dictionary<string, ErrorMapping> GoodErrorMappings { get; set; } = new Dictionary<string, ErrorMapping>();
public Dictionary<string, ErrorMapping> BadErrorMappings { get; set; } = new Dictionary<string, ErrorMapping>();
}
public class ErrorMapping
{
public int HttpStatusCode { get; set; }
public int ErrorCode { get; set; }
public string Description { get; set; }
}
}
AppSettings.json:
{
"ApiConfig": {
"GoodErrorMappings": {
"/SOMEVALUE/BLAH.123": {
"httpStatusCode": "500",
"errorCode": "110012",
"description": "Invalid error description 1"
},
"/SOMEVALUE/BLAH.456": {
"httpStatusCode": "500",
"errorCode": "110013",
"description": "Invalid error description 2"
}
},
"BadErrorMappings": {
"/SOMEVALUE/BLAH:123": {
"httpStatusCode": "500",
"errorCode": "110012",
"description": "Invalid error description 1"
},
"/SOMEVALUE/BLAH:456": {
"httpStatusCode": "500",
"errorCode": "110013",
"description": "Invalid error description 2"
}
}
}
}
输出:
GoodErrorMappings: {
"/SOMEVALUE/BLAH.123": {
"HttpStatusCode": 500,
"ErrorCode": 110012,
"Description": "Invalid error description 1"
},
"/SOMEVALUE/BLAH.456": {
"HttpStatusCode": 500,
"ErrorCode": 110013,
"Description": "Invalid error description 2"
}
}
BadErrorMappings: {
"/SOMEVALUE/BLAH": {
"HttpStatusCode": 0,
"ErrorCode": 0,
"Description": null
}
}
【问题讨论】:
标签: c# configuration asp.net-core .net-core