gpt4 book ai didi

c# - 最小 Web Api 未返回所需结果

转载 作者:行者123 更新时间:2023-12-03 03:23:55 31 4
gpt4 key购买 nike

我在 Visual Studio 中创建了一个最小的 ASP.NET Core Web API 项目。然后将其部署到 Azure Web 应用服务,以便能够远程“获取”结果。在本地,/weatherforecast 示例数据和 Azure SQL 数据一样运行良好,但是发布后,只能访问 Weatherforecast,而/Members 则不能。

程序.cs

using Microsoft.Data.SqlClient;
using Microsoft.AspNetCore.OpenApi;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

var app = builder.Build();

// Configure the HTTP request pipeline.

app.UseHttpsRedirection();

var summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};

app.MapGet("/weatherforecast", () =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
(
DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();
return forecast;
});
string connectionString = Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING");

app.MapGet("/Members", () => {
var rows = new List<string>();

using var conn = new SqlConnection(connectionString);
conn.Open();

var command = new SqlCommand("SELECT * FROM WHATEVER", conn);
using SqlDataReader reader = command.ExecuteReader();

if (reader.HasRows)
{
while (reader.Read())
{
rows.Add($"{reader.GetInt32(0)}, {reader.GetString(1)}, {reader.GetString(2)}, {reader.GetString(3)}, {reader.GetString(4)}, {reader.GetInt32(5)}, {reader.GetInt32(6)}, {reader.GetDecimal(7)}, {reader.GetInt32(8)}, {reader.GetDateTime(9)}");
}
}

return rows;
})
.WithName("GetMembers")
.WithOpenApi();


app.Run();

internal record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}

Service Dependencies

一般说明:

  1. 我在 Visual Studio 中的帐户凭据与运行 Azure SQL 的 Azure 门户中的帐户凭据相同。
  2. 我一直在关注this该项目的链接。
  3. 我的连接字符串是“Server=tcp:xxx;Database=xxx;Authentication=Active Directory Default;”它在 launchSettings.json 中的environmentVariable 下声明。也在 appsettings.json 中声明。
  4. 调用/Members 端点时,我收到 HTTP ERROR 500。

非常感谢您的帮助,谢谢。

最佳答案

我假设发生的情况是,它无法获取在 launchSettings.json 中声明的环境变量,只是因为该文件未发布,因为它旨在在开发环境中使用。由于它无法获取此环境变量的值,因此它会回退到您稍后尝试使用的 string.Empty 进行连接。 500 错误表示出现了严重错误,在本例中,您尝试使用“”(空字符串)作为连接字符串来连接到数据库。

如果您已经在 appsettings.json 中声明了它,那么您应该能够像这样获取连接字符串,而不是环境变量

string connectionString = builder.Configuration.GetConnectionString("AZURE_SQL_CONNECTIONSTRING");

假设您的连接字符串定义如下

"ConnectionStrings": {
"AZURE_SQL_CONNECTIONSTRING" : "..."
}

关于c# - 最小 Web Api 未返回所需结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76056696/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com