gpt4 book ai didi

c# - 如何将默认值从 appsettings 设置为 API 模型上的属性

转载 作者:行者123 更新时间:2023-12-05 06:23:24 25 4
gpt4 key购买 nike

如何在 .NET Core 3 框架实例化的模型上为属性设置默认值,从我的 appsettings.json 文件中读取它?

我创建了一个 repo(一个全新的 .NET Core 3 项目),我试图在其中说明问题:https://github.com/NelsonPRSousa/dependency-injection-default-constructor

API 操作:

[HttpGet]
public IEnumerable<WeatherForecast> Get([FromQuery] FilteringRequestModel request)
{

var defaultType = request.Type;

var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}

型号:

public class FilteringRequestModel
{
/* Please note that we must have a parameterless constructor, since it's the framework responsability to instatiate this object
* when invoking this action: IEnumerable<WeatherForecast> Get([FromQuery] FilteringRequestModel request)
*/

public FilteringRequestModel()
{
//Type = System.Configuration.ConfigurationManager.AppSettings["DefaultTypeTopRated"];
}

public string Type { get; set; } = "top_rated"; // TODO: Read from appsettings
}

最佳答案

您可以将 IOptions 与依赖注入(inject)一起使用

更新FilteringRequestModel

public class FilteringRequestModel
{
public FilteringRequestModel()
{
}

public void Initialize(IOptions<FilteringRequestSettings> settings)
{
if (string.IsNullOrEmpty(this.Type))
{
this.Type = settings.Value.Type;
}
}

public string Type { get; set; }
}

添加 FilteringRequestSettings

public class FilteringRequestSettings
{
public string Type { get; set; }
}

更新appsettings.Development.json像这样

{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"FilteringRequest": {
"Type": "foo"
}
}

更新ConfigureServices Startup 中的方法像这样上课

public void ConfigureServices(IServiceCollection services)
{
services.Configure<FilteringRequestSettings>(this.Configuration.GetSection("FilteringRequest"));

services.AddControllers();
}

最后,更新WeatherForecastController像这样上课

[HttpGet]
public IEnumerable<WeatherForecast> Get([FromQuery] FilteringRequestModel request)
{
request.Initialize(_settings);

var defaultType = request.Type;

var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}

解释

  • 您将从 appsettings 加载参数到 IOptions<FilteringRequestSettings>
  • IOptions<FilteringRequestSettings>会被注入(inject) WeatherForecastController
  • 然后您将调用 Initialize方法你 request参数与 IOptions<FilteringRequestSettings>
  • Initialize方法验证是否 Type尚未设置属性(来自查询/请求)。如果不是,它将使用来自 appsettings 的值(通过 IOptions<FilteringRequestSettings>

关于c# - 如何将默认值从 appsettings 设置为 API 模型上的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58402907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com