从appsetting中提取值.Json不起作用



我有一个关于从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));

最新更新