我正在尝试通过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相关的代码都可以在客户端正常工作)
1条答案
按热度按时间qojgxg4l1#
我做了几件事使我的控制器工作:1。我没有重命名现有的控制器(在项目创建时创建的控制器),而是创建了新的控制器。这一点很重要,因为项目为每个控制器创建了新的视图文件夹,如果没有这些文件夹,它将无法工作,并且它还执行了其他一些使控制器工作的魔法。2在global.asax.cs文件中,我重新排序了内容,因此它的顺序是(正确的):
三。在web.config中我添加了
runAllManagedModulesForAllRequests="true"
到<modules/>
内<system.webServer>
.就这样。api工作,sql数据通过httpget传递到客户端应用程序。
我花了12个多小时才修好。