0

我有这样的课:

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,
      "iconSize": "small",
      "sortOrder": 5
    },
    {
      "gameId": 5,
      "iconSize": "small",
      "sortOrder": 8,
      "chips": []
    },
    {
      "gameId": 6,
      "iconSize": "small",
      "sortOrder": 7
    },
    {
      "gameId": 7,
      "iconSize": "big",
      "sortOrder": 1,
      "chips": []
    },
  ]
}

我正在尝试使用选项模式通过这样的控制器返回这些游戏设置:

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));
}

然而,控制器总是返回 null。我不知道我是否在配置界面中使用了错误的方法。问题似乎在于 JSON 文件和 GameSettingOptions 类之间的绑定。因此,目前 API 不断返回:

gameId: 0iconSize: sortOrder: 0chips: 

我从调试配置返回的内容中得到什么 在此处输入图像描述

4

0 回答 0