10

我已经挖掘了好几个小时,不断提出有关 .NET Core 的信息,但几乎没有任何关于 .NET 4.7 完整框架的信息。我想出了如何将用户机密添加到我的 Web API 解决方案的主项目中。我得到了基本的 secrets.xml 文件,我需要在其中存储我的数据库用户名和密码或我的连接字符串。我发现的每一篇文章都谈到了您需要对 web.config 进行的更改。但是,在 secrets.xml 文件中没有显示如何处理我的连接字符串、如何格式化它。我可以创建一个名称/值对,但这似乎没有任何作用,我的应用程序无法连接到数据库。

我的 Web.config 中有这个:

  <configBuilders>
    <builders>
    <add name="Secrets" userSecretsId="5c65f7eb-a7e1-46cc-bff4-a526678005f2" type="Microsoft.Configuration.ConfigurationBuilders.UserSecretsConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.UserSecrets, Version=1.0.0.0, Culture=neutral" /></builders>
  </configBuilders>

  <connectionStrings configBuilders="Secrets">
    <add name="ShopAPDbConnectionString" connectionString="" providerName="System.Data.SqlClient" />
  </connectionStrings>

我的 secrets.xml 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <secrets ver="1.0">
    <secret name="ShopAPDbConnectionString" value="Server=SQLDEV01;Database=ShopAP; Integrated Security=True;" />
  </secrets>
</root>

如何正确格式化并使其正常工作?

4

3 回答 3

10

这是我能够根据https://github.com/aspnet/MicrosoftConfigurationBuilders开始工作的内容

网页配置

<configuration>
    <configSections>
        <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
    </configSections>
    <configBuilders>
        <builders>
            <add name="Secrets" userSecretsFile="~/../../../SecretsTest/secrets.xml" mode="Greedy" type="Microsoft.Configuration.ConfigurationBuilders.UserSecretsConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.UserSecrets, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            <add name="Json" jsonFile="${JSONConfigFileB}" optional="true" type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Json, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        </builders>
    </configBuilders>
    <!--...-->
    <appSettings configBuilders="Secrets">
        <!--...-->
    </appSettings>
    <!--...-->
    <connectionStrings configBuilders="Json">
        <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="dummy.value.required" />
    </connectionStrings>
    <!--...-->
</configuration>

秘密.xml

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <secrets ver="1.0">
    <secret name="usersecret1" value="dogodog" />
    <secret name="usersecret2" value="secretbar" />
    <secret name="JSONConfigFileB" value="C://Users//xxx//Documents//xxx//xxx//SecretsTest//settings.json" />
  </secrets>
</root>

设置.json

{
  "DefaultConnection": "Server=666.66.666.6;Database=BigToe;User ID=FireBall;Password=BunniesAreSoft",
}
于 2020-05-07T04:45:45.120 回答
0

你的两个文件看起来都很好——和我的几乎一模一样。你是如何创建你的秘密文件的?您是否使用右键单击 Web 项目和管理用户机密?这将在 %APPDATA% 的文件夹位置创建一个文件,当您在 Visual Studio 中按 F5(调试 > 开始调试)时应该拾取该文件。但是,如果您编译然后浏览到 localhost,则 IIS 将看不到它。即使您将 inetmgr 中的 App Pool Identity 更改为在您的帐户下运行,并设置 Load User Profile - 它仍然找不到它。

要找到此案例中机密的正确位置,请运行您的 Web 应用程序并获取以下结果

string appdata = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

并将机密文件复制到匹配的子文件夹 Microsoft\UserSecrets\(guid)\

例如 C:\Windows\System32\config\systemprofile\AppData\Roaming\Microsoft\UserSecrets\5c65f7eb-a7e1-46cc-bff4-a526678005f2\secrets.xml

您可能需要一次性在资源管理器中获得访问权限,并创建 UserSecrets 文件夹及以下文件夹。

如果您将来编辑它,请记住更新这两个副本。

于 2021-11-09T00:53:13.090 回答
-1

我正在尝试做同样的事情,但不幸的是,我认为这仅适用于 .Net Framework/Web.config 的 appSettings。

于 2020-02-07T18:13:19.103 回答