【发布时间】:2019-01-02 18:00:06
【问题描述】:
我正在尝试通过 API 从 SQLEXPRESS 数据库中提取数据到我的客户端 UWP 应用程序。
这是我的代码(因此思考):
API 控制器:
[Route("api/product")]
public class ProductController : ApiController
{
// GET: api/product
[HttpGet]
public ObservableCollection<Product> Get()
{
string userId = "newuser"; //for testing only
return Model.ReadAllSQLProducts(userId);
}
}
型号:
// R part of CRUD
public static ObservableCollection<Product> ReadAllSQLProducts(string userId)
{
var connString = "Server=localhost\\SQLEXPRESS;Integrated Security = SSPI; database = myDbName";
string cmdText = "Select * FROM Product WHERE CONVERT(VARCHAR, UserId) = @userId;";
using (var sqlConnection = new SqlConnection(connString))
{
using (var sqlCmd = new SqlCommand(cmdText, sqlConnection))
{
List<Product> SQLProductList = new List<Product>();
sqlConnection.Open();
SqlParameter param = new SqlParameter();
param.ParameterName = "@userId";
param.Value = userId;
sqlCmd.Parameters.Add(param);
SqlDataReader reader = sqlCmd.ExecuteReader();
while (reader.Read())
{
Product sqlProduct = new Product();
sqlProduct.UserId = (string)reader["UserId"];
sqlProduct.Name = (string)reader["Name"];
sqlProduct.Category = (string)reader["Category"];
SQLProductList.Add(sqlProduct);
}
List<Product> myCollection = SQLProductList.ToList();
ObservableCollection<Product> dbSQLProductsList = new ObservableCollection<Product>(myCollection);
return dbSQLProductsList;
}
}
}
这是客户端的消费方式(至少根据我遵循的教程:
using (var client = new HttpClient())
{
var response = "";
Task task = Task.Run(async () =>
{
response = await client.GetStringAsync(App.BaseUri); // sends GET request
});
task.Wait(); // Wait
listViewAPI.ItemsSource = JsonConvert.DeserializeObject<ObservableCollection<Product>>(response); // Bind the list
}
App.BaseUri 是:
public static Uri BaseUri = new Uri("http://localhost:58834/api/Product/"); // base API URL; UserController
所以,我必须说这是我第一次尝试使用 API。 客户端最初依赖于像魅力一样工作的 SQLite。在后期阶段,我决定与 MySQL 同步。我设法让它在客户端应用程序中工作。 但是,我想将所有与 SQL 相关的代码移到 API 中。该 API 不仅适用于 UWP 应用,还适用于 Android 和 iOS(Xamarin.Forms)。
API URL 返回 ASP.NET 主页。显然,API 无法从数据库中获取数据,并且客户端应用程序没有可用的 JSON 数据。
我做错了什么>???
(作为补充——尽管所有与 SQL 相关的代码在客户端都能正常运行)
【问题讨论】:
-
您是否尝试在 get 处理程序中添加断点?它会被击中吗?我怀疑这与 SQL 有关,而是与应用程序不知道您的控制器有关。
-
此外,您为什么使用可观察的集合作为 API 端点的结果。这对我来说似乎没有意义,因为您不需要在更改集合时触发任何事件。
-
在开始做 API 之前,我在 App 中使用了 ObservableCollection。所以我保持原样。
-
@derpirscher 关于您的第一条评论,我必须验证您的建议
-
@derpirscher 我放了断点,但代码没有到达处理程序...
标签: c# mysql json asp.net-web-api sql-server-express