.Net Core 和 .NET Framework 应用程序是否以不同方式访问 web.config 文件?
Does .Net Core and .NET Framework apps access the web.config files in different ways?
好的,那么,我在一个解决方案中有两个主要项目。一个是 NETFramework 4.7.2 上的 WebApp,它是这里的主要应用程序,具有网页、控件等。另一个是使用 Worker Service 模板的 NETCore 3 应用程序,基本上,windows 服务 运行 几个自动化任务。
对于这两个应用程序,我都设置了一个 class 库以从外部 API 使用、发出 HTTP 请求并处理错误。我遇到的问题是,NetCore 应用程序不会从 web.config
文件中读取一些密钥。
我了解到,最好的做法是在 web.config
上保留一些信息,例如身份验证密钥,并通过 ConfigurationManager 获取它们,当我通过 WebApp 使用 API 时,它工作正常,但是当我尝试在 NetCore 端做同样的事情时,ConfigurationManager.AppSettings
总是 returns 为空。这是我用来获取库中使用 API:
键值的助手 class
using System.Configuration;
namespace ZoopAPI.Manager.Tools
{
public class ApiEndpoints
{
public static string getEndpoint(string endpoint)
{
var settings = ConfigurationManager.AppSettings;
string url = ConfigurationManager.AppSettings[endpoint];
return url;
}
public static string getConfigValue(string config, bool test)
{
string configValue = "";
if (test)
{
configValue = ConfigurationManager.AppSettings["Test" + config];
}
else
{
configValue = ConfigurationManager.AppSettings[config];
}
return configValue;
}
}
}
web.config
看起来像这样:
<appSettings>
<add key="ZoopApiV2" value="https://url/"/>
<add key="ZoopApiV1" value="https://anotherUrl/"/>
<add key="TestMarketplaceId" value="hexaDecimalCode"/>
<add key="TestDescontanetMaster" value="AnotherHexaDecimalCode"/>
<add key="TestAuthKey" value="Basic Auth Key"/>
<add key="MarketplaceId" value="Basic Auth Key"/>
<add key="DescontanetMaster" value="AnotherHexaDecimalCode"/>
<add key="AuthKey" value="Basic Auth Key"/>
<add key="webpages:Version" value="3.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
我并不完全了解 .NET 的世界,但我知道 NETCore 和 NETFramework 在某些方面是不同的,所以是否存在兼容性问题?如果可能的话,我想避免在库中有一个 class 只是为了将值存储为私有字符串,因为它看起来不专业......?非常感谢。
web.config
不再被 ASP.NET 核心使用。 migration guide 表示:
ASP.NET Core no longer uses the Global.asax and web.config files that previous versions of ASP.NET utilized.
...
The web.config file has also been replaced in ASP.NET Core. Configuration itself can now be configured, as part of the application startup procedure described in Startup.cs. Configuration can still utilize XML files, but typically ASP.NET Core projects will place configuration values in a JSON-formatted file, such as appsettings.json. ASP.NET Core's configuration system can also easily access environment variables, which can provide a more secure and robust location for environment-specific values. This is especially true for secrets like connection strings and API keys that shouldn't be checked into source control. See Configuration to learn more about configuration in ASP.NET Core.
好的,那么,我在一个解决方案中有两个主要项目。一个是 NETFramework 4.7.2 上的 WebApp,它是这里的主要应用程序,具有网页、控件等。另一个是使用 Worker Service 模板的 NETCore 3 应用程序,基本上,windows 服务 运行 几个自动化任务。
对于这两个应用程序,我都设置了一个 class 库以从外部 API 使用、发出 HTTP 请求并处理错误。我遇到的问题是,NetCore 应用程序不会从 web.config
文件中读取一些密钥。
我了解到,最好的做法是在 web.config
上保留一些信息,例如身份验证密钥,并通过 ConfigurationManager 获取它们,当我通过 WebApp 使用 API 时,它工作正常,但是当我尝试在 NetCore 端做同样的事情时,ConfigurationManager.AppSettings
总是 returns 为空。这是我用来获取库中使用 API:
using System.Configuration;
namespace ZoopAPI.Manager.Tools
{
public class ApiEndpoints
{
public static string getEndpoint(string endpoint)
{
var settings = ConfigurationManager.AppSettings;
string url = ConfigurationManager.AppSettings[endpoint];
return url;
}
public static string getConfigValue(string config, bool test)
{
string configValue = "";
if (test)
{
configValue = ConfigurationManager.AppSettings["Test" + config];
}
else
{
configValue = ConfigurationManager.AppSettings[config];
}
return configValue;
}
}
}
web.config
看起来像这样:
<appSettings>
<add key="ZoopApiV2" value="https://url/"/>
<add key="ZoopApiV1" value="https://anotherUrl/"/>
<add key="TestMarketplaceId" value="hexaDecimalCode"/>
<add key="TestDescontanetMaster" value="AnotherHexaDecimalCode"/>
<add key="TestAuthKey" value="Basic Auth Key"/>
<add key="MarketplaceId" value="Basic Auth Key"/>
<add key="DescontanetMaster" value="AnotherHexaDecimalCode"/>
<add key="AuthKey" value="Basic Auth Key"/>
<add key="webpages:Version" value="3.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
我并不完全了解 .NET 的世界,但我知道 NETCore 和 NETFramework 在某些方面是不同的,所以是否存在兼容性问题?如果可能的话,我想避免在库中有一个 class 只是为了将值存储为私有字符串,因为它看起来不专业......?非常感谢。
web.config
不再被 ASP.NET 核心使用。 migration guide 表示:
ASP.NET Core no longer uses the Global.asax and web.config files that previous versions of ASP.NET utilized.
...
The web.config file has also been replaced in ASP.NET Core. Configuration itself can now be configured, as part of the application startup procedure described in Startup.cs. Configuration can still utilize XML files, but typically ASP.NET Core projects will place configuration values in a JSON-formatted file, such as appsettings.json. ASP.NET Core's configuration system can also easily access environment variables, which can provide a more secure and robust location for environment-specific values. This is especially true for secrets like connection strings and API keys that shouldn't be checked into source control. See Configuration to learn more about configuration in ASP.NET Core.