微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.Net Core和.NET Framework应用程序是否以不同方式访问web.config文件?

如何解决.Net Core和.NET Framework应用程序是否以不同方式访问web.config文件?

好的,因此,我在解决方案中有两个主要项目。一个是NETFramework 4.7.2上的WebApp,它是这里的主要应用程序,带有网页,控件等。另一个是使用Worker Service模板的NETCore 3应用程序,基本上是一个Windows服务,用于运行一些自动化任务。

对于这两个应用程序,我都设置了一个类库以从外部API使用,发出HTTP请求并处理错误。我遇到的问题是,NetCore应用程序无法从web.config文件中读取某些密钥。

我了解到,最好的做法是将一些信息(如身份验证密钥)保留在web.config上,并通过ConfigurationManager进行获取,当我通过WebApp使用API​​时,这种方法可以正常工作,但是当我尝试执行与NetCore端相同,ConfigurationManager.AppSettings始终返回null。这是我用来在使用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在某些方面有所不同,因此是否存在兼容性问题?如果可能的话,我想避免在库中只有一个类来将值存储为私有字符串,因为这似乎不专业...?预先非常感谢。

解决方法

web.config不再被ASP.NET Core使用。 migration guide说:

ASP.NET Core不再使用以前版本的ASP.NET使用的Global.asax和web.config文件。

...

web.config文件在ASP.NET Core中也已被替换。现在可以配置配置本身,作为Startup.cs中描述的应用程序启动过程的一部分。配置仍然可以利用XML文件,但是通常ASP.NET Core项目会将配置值放在JSON格式的文件中,例如appsettings.json。 ASP.NET Core的配置系统还可以轻松访问环境变量,从而可以为特定于环境的值提供更安全,更可靠的位置。对于不应该检查到源代码控制中的秘密,例如连接字符串和API密钥,尤其如此。请参阅“配置”以了解有关ASP.NET Core中配置的更多信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。