【问题标题】:Connection String is not working in new Controller from web.config连接字符串在 web.config 的新控制器中不起作用
【发布时间】:2015-08-10 16:35:06
【问题描述】:

我使用 WebAPI 创建了一个 MVC 项目。我创建了一个控制器(从 ApiController 派生)并添加了以下行

string connstring = System.Configuration.ConfigurationManager.ConnectionStrings["isrOAK"].ToString();

它会抛出一个空异常,“对象引用未设置为对象的实例”。

但是,有一个 HomeController(从 Controller 派生)被自动添加到项目中。连接字符串有效。

知道为什么以及如何让它在派生的 Api 控制器上工作吗?

更新:我正在使用 UNIT TEST 项目来测试 WebAPI 项目。我从单元测试方法调用 HomeController Index() 并且它没有抛出相同的异常。单元测试项目中需要什么才能使获取连接字符串起作用?

【问题讨论】:

  • HomeController 与 WebAPI 控制器在同一个项目中?这里什么都不应该改变;如果 ConnectionStrings["isrOAK"] 在您所在项目的 web.config 中,则会发生该错误...
  • null 具体是什么?您确定该条目在运行时使用的配置中吗?没有什么可以阻止它在 API 控制器中工作。
  • 我怀疑找不到按名称的连接字符串。在这一行设置断点,分析如下:System.Configuration.ConfigurationManager.ConnectionStrings["isrOAK"]。那是空的吗?
  • @ThomasStringer 你是对的!!而且有一种代码味道,因为他正在调用 ToString() 。

标签: asp.net asp.net-mvc


【解决方案1】:

System.Configuration.ConfigurationManager.ConnectionStrings["isrOAK"] 返回一个 ConnectionStringSettings 对象。使用 .ConnectionString 获取实际的连接字符串。

string connstring = System.Configuration.ConfigurationManager.ConnectionStrings["isrOAK"].ConnectionString;

【讨论】:

    【解决方案2】:

    访问连接字符串:

    var conifg = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"];
    

    并在您的 web.config 文件中添加密钥,如下所示:

     <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MvcApplication1-20150716202930;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-MvcApplication1-20150716202930.mdf" providerName="System.Data.SqlClient" />**
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2012-08-16
      • 2013-06-25
      • 2011-04-03
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多