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)。
我有一个 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)。