ASP.NET Web API localhost:xxxx/API/product默认为主页,而不是JSON数据(或X



我正试图通过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
}

应用程序。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.我没有重命名现有的控制器(在项目创建时创建的控制器(,而是创建了新的控制器。这一点很重要,因为该项目为每个控制器创建了新的Views文件夹,如果没有它,它将无法工作,而且它还发挥了其他一些神奇的作用,使控制器能够工作。2.在Global.asax.cs文件中,我重新排序了东西,所以它是按照这个(正确的(顺序:

AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);

3.在Web.config中,我将runAllManagedModulesForAllRequests="true"添加到<system.webServer>中的<modules/>

就是这样。API工作,SQL数据通过HttpGet传递到客户端应用程序。

我花了12个多小时才修好。

最新更新