微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对于需要绑定到强类型类的 json 文件,IOptions<T> 和配置控制器始终返回 null

如何解决对于需要绑定到强类型类的 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

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。