如何在c#中从appsettings文件访问用户名和密码到program.cs [重复]

Posted

技术标签:

【中文标题】如何在c#中从appsettings文件访问用户名和密码到program.cs [重复]【英文标题】:How to access the username and password from appsettings file to program.cs in c# [duplicate] 【发布时间】:2021-08-01 08:36:35 【问题描述】:

我正在实现一个控制台应用程序来构建应用程序池状态。我参考了check the status of IIS Application Pool 从数据库中获取用户名和密码,我想从 appsettings.json 中获取它们。

我遇到的问题是值(用户名 jandi)没有传递给 program.cs,它传递了一个空值。

我已经包含了我的代码。

program.cs

using Serilog;
using System;
using System.Configuration;
using System.DirectoryServices;
using System.Timers;

namespace processstatus

    class Program
    
       

        static void Main(string[] args)
        
            const double interval60Minutes = 5 * 5 * 1000; // milliseconds to one hour
            Timer checkForTime = new Timer(interval60Minutes);
            checkForTime.Elapsed += new ElapsedEventHandler(checkForTime_Elapsed);
            checkForTime.Enabled = true;
            Console.WriteLine("Waiting..");
            Console.ReadLine();
        

        public static void checkForTime_Elapsed(object sender, ElapsedEventArgs e)
        
            GetApplicationPoolNames();
        

        public static string GetApplicationPoolNames()
        
            string UName = ConfigurationManager.AppSettings["User"];
            string Pwd = ConfigurationManager.AppSettings["Pass"];
            string ServerName = ConfigurationManager.AppSettings["Server"];
            DirectoryEntries appPools = null;
            try
            
                appPools = new DirectoryEntry("IIS://" + ServerName + "/W3SVC/AppPools", UName, Pwd).Children;
            
            catch (Exception ex)
            
                Log.Error("serviceLogic -> InsertStatus() -> IIS Pool App Region -> DirectoryEntries -> Error: ", ex.Message.ToString());
            

            Log.Information("IIS App Pool Section Started for " + System.Environment.MachineName.ToString());

            try
            
                foreach (DirectoryEntry appPool in appPools)
                
                    Log.Information("App Pool : " + appPool.Name.ToString());
                    int intStatus = 0;
                    string status = "";
                    try
                    
                        if (appPool.Name.ToString().ToLower().Trim() == ConfigurationManager.AppSettings["Server"].ToString().ToLower().Trim())
                        
                            Log.Information("Process Started for App Pool : " + appPool.Name.ToString());

                            intStatus = (int)appPool.InvokeGet("AppPoolState");
                            switch (intStatus)
                            
                                case 2:
                                    status = "Running";
                                    break;
                                case 4:
                                    status = "Stopped";
                                    break;
                                default:
                                    status = "Unknown";
                                    break;
                            

                            //Store status info to db or file Logic goes here..

                            //Start App pool, If any application pool status is not Running.
                            if (status != "Running")
                                appPool.Invoke("Start", null);

                            Log.Information("Process Completed for App Pool : " + appPool.Name.ToString());
                        
                    
                    catch (Exception ex)
                    
                        Log.Error("serviceLogic -> InsertStatus() -> IIS Pool App Region -> Error: ", ex.Message);

                    
                
            
            catch (Exception ex)
            
                Log.Error("serviceLogic -> InsertStatus() -> IIS Pool App Region -> DirectoryEntries -> Error: ", ex.Message);
            
            return "Message";
        
    

Appsettings.json 文件

   
  "AppSettings": 
    "User": "jandi",
    "Pass": "jandi123",
    "Server": "abc"
  

有人可以告诉我上面代码中的错误吗?

【问题讨论】:

这是 .NET Framework、.NET Core 还是 .NET 5?另外,ConfigurationManager 用于 .NET Framework 的 app.config 文件,而不是用于 .NET Core 的 appsettings.json 文件 @Progman我已经推荐过了。所以为了做到这一点,是否必须使用mvc架构?有没有办法在不使用mvc的情况下完成要求? 你不需要使用 ASP.NET Core。你可以只安装 Microsoft.Extensions.Configuration 包(nuget.org/packages?q=microsoft.extensions.configuration),我认为 Json 应该足够了 ConfigurationManager 读取 app.config 文件而不是 appsettings.json。您需要使用 appSettings 部分添加适当的 app.config,然后您的代码应该可以工作(前提是它可以正确编译) @Steve 非常感谢您指出我的错误。它成功了!!! 【参考方案1】:

对于 .NET Core 控制台应用程序,您可以使用 Microsoft.Extensions.Configuration 来读取 appsettings.json 文件,正如 cmets 中已经指出的那样。我已经使用了几次,它似乎工作得很好。然后你可以在你的 Program 类中使用这样的东西:

private static IConfiguration _configuration = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", true, true)
    .Build();

然后您可以通过 _configuration 变量读取 appsettings 变量。

【讨论】:

以上是关于如何在c#中从appsettings文件访问用户名和密码到program.cs [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中从 Facebook SDK 获取当前用户访问令牌?不是应用访问令牌

在 C# Web 应用程序中从网络共享访问文件

如何在单个项目中从 C# 中的多个配置文件中读取值?

如何在 C# 中从 HTML 文件中提取图像 url

如何在使用 .NET Core 的控制台应用程序中从 appsettings.json 获取值?

如何在 C# 中从外部站点的 url 读取 PDF 文件 [关闭]