首页 > 解决方案 > .NET 项目中的方法的 .NET Core API 调用说它在 app.config 文件中找不到连接字符串

问题描述

我有一个 Core API 项目,它最初是从控制器访问数据库(不好的做法),所以我将数据访问方法移动到现有的 .NET 类库中,其中连接字符串存储在 app.config 文件中。相同的连接字符串也位于 Core API 项目的 appsettings.json/appsettings.development.json 文件夹中。

然后我尝试从我的 API 访问这个新的 .NET 类库方法(包含对数据库的调用),但我收到“在 app.config 中找不到 'connectionstringname'”错误。我是 .NET 的新手,但一位同事说 app.config 可能没有被拉入 API 的 bin 文件夹。有没有人遇到过 .NET Core 项目难以与 .NET 项目的连接字符串通信的问题,我该如何解决这个问题?

1.)我尝试将 app.config 文件粘贴到 API 的 bin 文件夹中,但无济于事(同样的错误。)

我在 SO 上看到了一些答案,但未能成功实施,所以如果之前已经回答过,我深表歉意。

标签: c#.net.net-core

解决方案


您需要完全抛弃对配置设置的 dot-net-framework 理解。

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-5.0

注意 url 的值。

aspnet 核心 基础 配置

在 DotNet-Core 中:强烈建议创建第一类对象。(config-value-holder-poco)

并在您的 Ioc 注册中,将 config-value-holder-poco 注入 Ioc(又名 dn-core 中的“servicecollection”)。

然后构造函数注入您的设置 poco 持有人。

根据文章。

Json“部分”

  "Position": {
    "Title": "Editor",
    "Name": "Joe Smith"
  }

一流的 config-value-holder-poco。

public class PositionOptions
{
    public const string Position = "Position";

    public string Title { get; set; }
    public string Name { get; set; }
}

国际奥委会注册。

    public void ConfigureServices(IServiceCollection services)
{
    services.Configure<PositionOptions>(Configuration.GetSection(
                                        PositionOptions.Position));
  
}

构造函数注入:

public class Test2Model : PageModel
{
    private readonly PositionOptions _options;

    public Test2Model(IOptions<PositionOptions> options)
    {
        _options = options.Value;
    }

    public ContentResult OnGet()
    {
        return Content($"Title: {_options.Title} \n" +
                       $"Name: {_options.Name}");
    }
}

现在您可以利用“刷新率”内置选项来了解如何处理这些选项。

https://medium.com/@kmar.ayush/eli5-ioptions-vs-ioptionssnaphot-vs-ioptionsmonitor-fab1d7e26a75

IOptions vs IOptionsSnaphot vs IOptionsMonitor


推荐阅读