我正试图从ASP中的appsettings文件加载数据。NET核心项目。我以前做过,但现在我做不到。 此外,我试图配置一个名为Images的部分,并将其绑定到WorkImageOptions类型的对象,该对象包含有关图像集合的信息。
我尝试使用IOptionsSnapshot检索值,但如果设置部分有数据,则始终为空。
程序cs :
using SLT.Bohem63.Peachie.Config; WebApplicationBuilder builder = WebApplication.CreateBuilder(args); builder.Services .Configure<WorkImageOptions>(builder.Configuration.GetSection(WorkImageOptions.SectionName)); builder.Services.AddControllersWithViews(); WebApplication app = builder.Build(); app.UseRouting(); app.MapStaticAssets(); app.MapControllerRoute( name: "default", pattern: "{controller=Bohem63}/{action=Index}/{id?}") .WithStaticAssets(); app.Run();
WorkImageOptions.cs :
public sealed class WorkImageOptions { public IEnumerable<WorkImageInfo> Images { get; set; } public static string SectionName => "Images"; }
WorkImageInfo.cs :
namespace SLT.Bohem63.Peachie.Models.Data { public interface IWorkImageInfo { string Filename { get; set; } string Title { get; set; } string Description { get; set; } int Likes { get; set; } } public sealed class WorkImageInfo : IWorkImageInfo { public string Filename { get; set; } public string Title { get; set; } public string Description { get; set; } public int Likes { get; set; } = 0; } }
检索选项 :
public class Bohem63Controller(IOptionsSnapshot<WorkImageOptions> options) : Controller { }
应用程序参数 :
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "Images": { "filename": "pic1.jpg", "title": "", "description": "", "likes": 0 } }
在当前的结构下,apps.json必须看起来像这样才能工作:
"Images": { "Images": [ { "filename": "foo.jpg", "title": "bar", "description": "baz", "likes": 42 } ] }
虽然我会通过摆脱 SectionName 财产和使用 nameof 改为类名:
SectionName
nameof
builder.Services .Configure<WorkImageOptions>(builder.Configuration.GetSection(nameof(WorkImageOptions)));
应用设置:
"WorkImageOptions": { "Images": [ { "filename": "foo.jpg", "title": "bar", "description": "baz", "likes": 42 } ] }