如何解决对于需要绑定到强类型类的 json 文件,IOptions<T> 和配置控制器始终返回 null
我有一堂这样的课:
public class GameSettingOptions
{
public const string GameSettings = "GameSettings";
public int gameId { get; set; }
public string iconSize { get; set; }
public int sortOrder { get; set; }
public string[] chips { get; set; }
}
和一个像这样的 GameSettingsOptions.json 文件:
{
"GameSettings": [
{
"gameId": 1,"iconSize": "big","sortOrder": 6
},{
"gameId": 2,"iconSize": "small","sortOrder": 4
},{
"gameId": 3,"iconSize": "medium","sortOrder": 2
},{
"gameId": 4,"sortOrder": 5
},{
"gameId": 5,"sortOrder": 8,"chips": []
},{
"gameId": 6,"sortOrder": 7
},{
"gameId": 7,"sortOrder": 1,]
}
我正在尝试使用选项模式通过这样的控制器返回这些游戏设置:
public class GameSettingsControllers : ControllerBase
{
private readonly GameSettingOptions _gameSettingOptions;
public GameSettingsControllers(IOptions<GameSettingOptions> gameSettingOptions)
{
_gameSettingOptions = gameSettingOptions.Value;
}
public object GetGameSettings()
{
return Content ($"gameId: {_gameSettingOptions.gameId}" + $"iconSize: {_gameSettingOptions.iconSize}"
+ $"sortOrder: {_gameSettingOptions.sortOrder}" + $"chips: {_gameSettingOptions.chips}");
}
}
这是我设置 Startup.cs 文件以在 IOptions
类上使用依赖项注入的方式:
public Startup(IConfiguration configuration,IHostingEnvironment environment)
{
var builder = new ConfigurationBuilder()
.SetBasePath(environment.ContentRootPath)
.AddJsonFile("GameSettingOptions.json",optional: true,reloadOnChange: true);
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddCors(c =>
{
c.AddPolicy("AllowOrigin",options => options.AllowAnyOrigin());
});
services.Configure<GameSettingOptions>(options => Configuration.GetSection(GameSettingOptions.GameSettings).Bind(options));
}
但是控制器总是返回空值。我不知道我是否在 Configuration 界面中使用了错误的方法。问题似乎在于 JSON 文件和 GameSettingOptions 类之间的绑定。因此,目前 API 不断返回:
gameId: 0iconSize: sortOrder: 0chips:
What I get from debugging what the Configuration returns
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。