use*_*022 6 c# asp.net-core-webapi .net-6.0
我根据 Visual Studio 2022 中提供的默认模板创建了一个全新的 ASP.NET Core Web API 项目 (.NET 6)。之后,我在 appsettings.json 文件中添加了一个配置密钥,controller并尝试在类中访问它,但不能。
我的appsettings.json文件如下:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ProjectName" : "VeryFunny"
}
Run Code Online (Sandbox Code Playgroud)
控制器代码如下:
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly IConfiguration _configuration;
public WeatherForecastController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = _configuration["ProjectName"] // <-- I added this
})
.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
我在上面的方法中收到null而不是VeryFunny字符串,我在其中添加了箭头注释。Startup.cs我认为在 .NET 6 中类与Program.cs类的合并之后,IConfiguration现在很容易使用,但看来我错了。
更新:
这是在 Visual Studio 2022 中创建面向 .NET 6 的新 ASP.NET Core Web API 时获得的一个简单项目。当我创建面向 .NET 5 的新项目时,我没有任何问题,因为其中Startup.cs和Program.cs是分开的类和 的实例IConfiguration已经注入到Startup类中,而 .NET 6 中并非如此。存在一个现有的 SO 问题,它提出了相同的问题,但该问题及其答案集中于 .NET 之前的 .NET 实现6,例如 .NET Core 2.x、.NET 5 等。我的是 .NET 6 特定的。
您将需要使用.GetValue<type>,所以尝试
Summary = _configuration.GetValue<string>("ProjectName");
Run Code Online (Sandbox Code Playgroud)
您还可以查看详细帖子 /sf/answers/4090298411/(显示如何获取价值)
https://qawithexperts.com/article/asp-net/read-values-from-appsettingsjson-in-net-core/467(显示 appsettings.json 中模型的绑定)
更新:
我创建了新的 .NET Core 6 API 项目并使用了此代码
private readonly IConfiguration _configuration;
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger, IConfiguration configuratio)
{
_logger = logger;
_configuration = configuratio;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = _configuration.GetValue<string>("ProjectName")
})
.ToArray();
Run Code Online (Sandbox Code Playgroud)
这对我有用,这是 GIF 图片
我弄清楚了如何使用构造函数内的 IConfiguration 接口从控制器访问 appsettings.json 。
下面是我的代码示例:
public class HomeController : Controller
{
private readonly IConfiguration _config;
private string ConnectionString;
public HomeController(IConfiguration configuration)
{
_config = configuration;
ConnectionString = _config["Configurations:ConnectionString"];
Console.WriteLine(ConnectionString);
}
Run Code Online (Sandbox Code Playgroud)
连接字符串(在本例中是 json 文件内的参数)显示成功!我的 appsettings.json 代码:
"Configurations": {
"ConnectionString": "MyDBConnectionStringExample;"
}
Run Code Online (Sandbox Code Playgroud)
我真的建议您需要一个单独的类来处理所有数据库通信(如果是这种情况),否则它工作得很好......希望它对某人有帮助。
| 归档时间: |
|
| 查看次数: |
24917 次 |
| 最近记录: |