1

我正在将 azure 表存储用于我们的 webhook 发件人服务之一。

为此,必须在 web.config 文件中设置 MS_AzureStoreConnectionString。

现在我需要从密钥库中获取上述值,这只能通过自定义实现来完成。

我在 web.config 中删除了“MS_AzureStoreConnectionString”键。

而且我试图在我的启动类中将天蓝色表存储连接字符串注入到默认的 Web 挂钩实现中,如下所示。

SettingsDictionary settings = new SettingsDictionary();

string connectionString = helper.getTableSrorageConnectionString();

ConnectionSettings connection = new ConnectionSettings("MS_AzureStoreConnectionString", connectionString);

settings.Connections.Add("MS_AzureStoreConnectionString", connection);

但是我在运行我的APP时遇到了以下问题。

请在“Web.Config”文件的配置字符串部分提供名为“MS_AzureStoreConnectionString”的 Microsoft Azure 存储连接字符串。

我不想在 web.config / app 设置中保留连接字符串。

如何将连接字符串注入默认的 Web 挂钩实现?

请就此提出可能的解决方案。

4

2 回答 2

1

根据您的描述,如果您想在代码中设置连接字符串。我建议您可以在 WebApiConfig 类中创建自己的 InitializeCustomWebHooksAzureStorage 方法。

在 InitializeCustomWebHooksAzureStorage 获取 SettingsDictionary 之后,您可以将连接字符串添加到 SettingsDictionary。

更多细节,您可以参考以下代码:

  public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            config.InitializeCustomWebHooks();
            // Change the method
            config.InitializeCustomWebHooksAzureStorage2();
            config.InitializeCustomWebHooksApis();
            config.InitializeReceiveCustomWebHooks();
        }

        public static void InitializeCustomWebHooksAzureStorage2(this HttpConfiguration config)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }
            WebHooksConfig.Initialize(config);
            ILogger logger = config.DependencyResolver.GetLogger();
            SettingsDictionary settings = config.DependencyResolver.GetSettings();
            settings.Add("MS_AzureStoreConnectionString", "connection string");
            IStorageManager storageManager =  GetInstance2(logger);
            IWebHookStore store;           
            store = new AzureWebHookStore(storageManager, settings, logger);           
            CustomServices.SetStore(store);
        }


        private static IStorageManager _storageManager;

        internal static IStorageManager GetInstance2(ILogger logger)
        {
            if (_storageManager != null)
            {
                return _storageManager;
            }

            IStorageManager instance = new StorageManager(logger);
            Interlocked.CompareExchange(ref _storageManager, instance, null);
            return _storageManager;
        }


    }
于 2017-05-26T06:09:47.383 回答
0

下面的代码片段也对我有用。您必须在 config.InitializeCustomWebHooksAzureStorage() 之前添加以下行

ConnectionSettings value = new ConnectionSettings("MS_AzureStoreConnectionString", "connectionString")
SettingsDictionary settings = config.DependencyResolver.GetSettings(); settings.Add("MS_AzureStoreConnectionString",value );

于 2017-05-30T06:38:29.673 回答