Хранить пользовательские строки подключения для последующего использования в ASP.NET Веб — API

#c# #asp.net-web-api

#c# #asp.net-web-api

Вопрос:

Я работаю над сложным проектом, который позволяет каждому клиенту устанавливать информацию о своей строке подключения для подключения к своей собственной базе данных, но после этого я не знал, что делать или как позволить клиенту получить доступ к своей собственной строке подключения (у меня нет таблицы для сохранения строки подключения, которую я хочу сделать динамической).

Есть ли какой-либо способ сохранить строку подключения на странице конфигурации для каждого клиента и прочитать эту страницу в моей веб-конфигурации.

Ответ №1:

Если количество клиентов поддается управлению, то вы сохраняете его в файле web config, и вам нужна отдельная реализация DbContext, если у всех разные базы данных. Если один и тот же дизайн БД одинаков для всех, вы можете хранить учетные данные в словаре и динамически подготавливать строку подключения во время выполнения и подключения.

Вот пример для MSSQL (я предполагаю, что вы не используете EF), не нужно хранить connectionstring в web config. Подготовьте строку подключения. Вы также можете хранить пользовательские параметры в БД.

 public string BuildConnectionString(string dataSource, string dbName, string userId, string password,
        string persistSecurityInfo, string encrypt, string trustServerCertificate, string applicationIntent, string multiSubnetFailover)
        {
            return $"Data Source = {dataSource}; Initial Catalog = {dbName}; User ID = {userId}; Password = {password}; "  
                $"Persist Security Info = {persistSecurityInfo}; Encrypt = {encrypt}; TrustServerCertificate = {trustServerCertificate};"  
                $" ApplicationIntent = {applicationIntent}; MultiSubnetFailover ={multiSubnetFailover}";
        }
  

Пример подключения к БД:

 void CheckDbConnection()
{
    string connetionString = BuildConnectionString("WIN-50GP30FGO75", // or IP
         "Demodb", "YourUserID", "YourPassword", "True", "False", "False", 
         "ReadWrite", "False");
    string sql = "Select TutorialID,TutorialName from table1";

    using (SqlConnection cnn = new SqlConnection(connetionString))
    {
         using (SqlCommand command = new SqlCommand(sql, cnn))
         {
            cnn.Open();
            dataReader = sqlquery.ExecuteReader();

            while (dataReader.Read())
            {
                 Output = Output   dataReader.GetValue(0)   "-"   
                  dataReader.GetValue(1)   "</br>";
             }

             Console.Write(Output);

             cnn.Close();
          }
    }
}
  

Комментарии:

1. Да, дизайн одинаков для всех db, но можете ли вы дать мне больше информации о том, как подойти к этому процессу, или пример того, как это сделать

2. Что такое ваша база данных? MSSQL? Дайте мне пример строки подключения, которую вы используете.

3. Да, это mssql, это пример строки подключения, созданной во время выполнения и сохраненной в web config

4. спасибо, этот процесс не повлияет на разные запросы для разных клиентов, обратите внимание, что клиент будет использовать другие методы в БД после метода BuildConnectionString Я просто не хочу, чтобы строка подключения внезапно менялась для клиента

5. добро пожаловать. В первый раз вы можете хранить в БД, а затем использовать его. Вы можете разработать дизайн в соответствии с вашими требованиями.

Ответ №2:

Вы не сможете перезаписать или добавить что-либо в Web.config во время выполнения, только читать из него.Файл web.config считывается только один раз во время запуска и не будет использоваться впоследствии.

Чтобы преодолеть это, рекомендуется либо сохранить строку подключения для ваших клиентов в вашей собственной базе данных, либо сохранить их где-нибудь еще. Я предпочитаю использовать Azure KeyVault для этих целей, поскольку это позволяет пользователю изменять данные с помощью определенного ключа.

Также это один из тех сценариев, где безопасность является важным фактором, поэтому вы должны быть очень осторожны, предоставляя своим клиентам такие действия.