ASP.NET WebAPI 中的 ConfigurationManager 已通过 HttpServer 测试

ConfigurationManager in ASP.NET WebAPI tested with HttpServer

我有一个 Web API 项目,我试图通过 HttpServer.

使用内存托管来测试它

我有服务器 运行,但请求 returns 500 InternalServerError 响应。
当我尝试使用 ConfigurationManager 获取连接字符串时执行失败,在调试期间我可以看到 ConfigurationManager.ConnectionStrings 不包含给定键的值。
相反,它包含一些 "default" 连接字符串。

{
    "LocalSqlServer": "data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"`
}

Web.config 文件包含键为 "my-database"

的连接字符串
<configuration>
  <connectionStrings>
    <add name="my-database" providerName="System.Data.SqlClient" 
     connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\hotel.mdf;Integrated Security=True" />
  </connectionStrings>
</configuration>

失败的代码

public class Database
{
    public static SqlConnection CreateConnection()
    {
        var connectionString = 
            ConfigurationManager.ConnectionStrings["my-database"].ConnectionString; // Fails here with NullReference exception
        return new SqlConnection(connectionString);
    }
}

HttpServer 配置和测试

public class ServerTest : IDisposable
{
    private readonly HttpServer _server;

    public ServerTest()
    {
        var config = new HttpConfiguration();         
        WebApiConfig.Register(config); // Call configuration from system under the test
        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

        _server = new HttpServer(config);
    }

    public void Dispose() => _server.Dispose();

    [Fact]
    public async Task ReturnsOk()
    {
        var client = new HttpClient(_server)
        {
            BaseAddress = new Uri("http://dummy.testing.api/")
        };

        var response = await client.GetAsync("rooms");

        response.StatusCode.Should().Be(HttpStatusCode.OK);
    }
}

如何配置 HttpServer 以使用实际配置(连接字符串)?

鉴于所提供的详细信息,我不能确定,但​​是您运行您的代码是作为控制台应用程序吗?看来您可能 运行 这是某种 xUnit 测试?无论如何,您可能需要确保在您正在处理的任何项目中都有一个 "app.config" 文件(而不是 web.config)。