从API的注册表中获取连接字符串

时间:2018-09-26 09:23:38

标签: c# asp.net-web-api

我首先在VB.Net中创建了一个Web应用程序。现在,我正在使用Ionic框架创建其移动应用程序。语言是c#。

在Web应用程序中,我用来从Registry获取连接字符串,并将其保存在会话中。我曾经在global.asax中做到过。

global.asax:

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)

  Dim mDBConnector As String = String.Empty

  With Application
     .Add("ProductRegistryKey", "Accord 2.0")
     .Add("ProductGUID", "ea3asue4n43-mbk3-3nmn-n34n4h3j4n4n3")
     .Add("ProductId", "1")

     mDBConnector = WebHelper.GetDBConnector(Application.Item("ProductRegistryKey")

  End With
End Sub

我没有在我的API中使用任何会话,因为我已经知道API是无状态的,所以这不是一个好习惯。那么我该如何在我的API中实现呢?

1 个答案:

答案 0 :(得分:0)

第五个DBName在连接字符串配置中不存在,因此,调用ConfigurationManager.ConnectionStrings[DBName]时它将返回 null ,当您尝试执行以下操作时将导致空引用错误在空对象上调用成员。

检查以确保被调用的名称存在于 web.config 中。

<connectionStrings>
  <!-- ... -->
  <add name="FifthDbName" ...... />
</connectionStrings>

您还应该进行一些防御性编码,并在尝试访问该属性之前检查 null

var setting = ConfigurationManager.ConnectionStrings[DBName];
if(setting != null) {
    string DbConnector = setting.ConnectionString;
    bool Connection1 = DbConnector.ToLower().StartWith("metadata");
    if (Connection1 == true)
    {
      System.Data.Entity.Core.EntityClient.EntityConnectionStringBuilder 
      efBuilder = new 
      System.Data.Entity.Core.EntityClient.EntityConnectionStringBuilder(DbConnector);
      DbConnector = efBuilder.ProviderConnectionString;
    }
}
//...