我有一个关于从appsetting.json中提取值的问题
appsetting.json
"Negozi": {
"PerPage": 10,
"Order": {
"By": "Name",
"Ascending": false,
"Allow": ["Nome", "Citta"]
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
//useless code for this question
...
//Options
services.Configure<NegoziOptions>(configuration.GetSection("Negozi"));
}
NegoziOptions.cs
public class NegoziOptions
{
public int PerPage { get; set; }
public NegoziOrderOptions Order { get; set; }
}
public class NegoziOrderOptions{
public string By { get; set; }
public bool Ascending { get; set; }
public string Allow { get; set; }
}
}
然后我想提取数据这是我的方法
public class EfCoreNegoziService : INegoziService
{
private readonly C3PAWMDbContext dbContext;
private readonly IOptionsMonitor<NegoziOptions> negozioOptions;
public EfCoreNegoziService(C3PAWMDbContext dbContext, IOptionsMonitor<NegoziOptions> negozioOptions)
{
this.negozioOptions = negozioOptions;
this.dbContext = dbContext;
}
public async Task<List<NegozioViewModel>> GetNegoziAsync(string search, int page)
{
search = search ?? "";
page = Math.Max(1, page);
int limit = negozioOptions.CurrentValue.PerPage;
int offset = (page - 1) * limit;
/*
Other code
*/
}
我试着调试,但这等于0
int limit = negozioOptions.CurrentValue.PerPage;
我已经从appsetting获取了数据。像ConnectionsStrings一样,它工作得很好,但我不明白为什么我不能从Negozi中提取
您的appsettings.json
格式的Negozi
属性与NegoziOptions
类不匹配。
appsettings.json
中的Allow
属性为array字符串的NegoziOrderOptions
类中的Allow
属性为string.
你应该改变Allow
的类型为NegoziOrderOptions
的字符串数组。
你的NegoziOptions
类应该是这样的
public class NegoziOptions
{
public int PerPage { get; set; }
public NegoziOrderOptions Order { get; set; }
}
public class NegoziOrderOptions
{
public string By { get; set; }
public bool Ascending { get; set; }
public string[] Allow { get; set; }
}
你的appsettings.json
应该是这样的
{
"Negozi": {
"PerPage": 10,
"Order": {
"By": "Name",
"Ascending": false,
"Allow": [
"Nome",
"Citta"
]
}
}
}
And Configure method:
services.Configure<NegoziOptions>(a => configuration.GetSection("Negozi").Bind(a));