我有一个 Web API 项目,我试图通过使用 HttpServer
的内存托管来测试它。
我的服务器正在运行,但请求返回 500 InternalServerError 响应。
当我尝试使用 ConfigurationManager
获取连接字符串时执行失败,在调试期间我可以看到 ConfigurationManager.ConnectionStrings
不包含给定键的值。
相反,它包含一些“默认”连接字符串。
{
"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)。
关于c# - 使用 HttpServer 测试 ASP.NET WebAPI 中的 ConfigurationManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57525555/