【发布时间】:2018-03-08 18:04:26
【问题描述】:
我在 Visual Studio 2015 中使用 MySQL 数据库创建了一个 Web API。 API 运行良好。
所以我决定制作一个控制台client 应用程序,我可以在其中使用我的网络服务(网络 API)。客户端代码基于HttpClient,在API中我使用了HttpResponse。现在,当我运行控制台应用程序代码时,我什么也得不到。以下是我的代码:
类
class meters_info_dev
{
public int id { get; set; }
public string meter_msn { get; set; }
public string meter_kwh { get; set; }
}
这个类和我的 web API 模型类一样:
Web API 中的模型
namespace WebServiceMySQL.Models
{
using System;
using System.Collections.Generic;
public partial class meters_info_dev
{
public int id { get; set; }
public string meter_msn { get; set; }
public string meter_kwh { get; set; }
}
控制台应用程序代码
static HttpClient client = new HttpClient();
static void ShowAllProducts(meters_info_dev mi)
{
Console.WriteLine($"Meter Serial Number:{mi.meter_msn}\t Meter_kwh: {mi.meter_kwh}", "\n");
}
static async Task<List<meters_info_dev>> GetAllRecordsAsync(string path)
{
List<meters_info_dev> mID = new List<meters_info_dev>();
HttpResponseMessage response = await client.GetAsync(path);
if (response.IsSuccessStatusCode)
{
mID = await response.Content.ReadAsAsync<List<meters_info_dev>>();
}
else
{
Console.WriteLine("No Record Found");
}
return mID;
}
static void Main()
{
RunAsync().Wait();
}
static async Task RunAsync()
{
client.BaseAddress = new Uri("http://localhost:2813/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var m = await GetAllRecordsAsync("api/metersinfo/");
foreach(var b in m)
{
ShowAllProducts(b);
}
}
在我的 API 中,我在单个控制器下有 3 个 GET 方法,因此我为它们创建了不同的路由。它们的 URL 也不同。
-
http://localhost:2813/api/metersinfo/将返回所有记录
在调试代码的时候发现List<meters_info_dev> mID = new List<meters_info_dev>();是空的:
虽然回复是302 Found,但网址也是正确的:
更新 1
根据一个建议,我做了以下事情:
using (var client = new HttpClient())
{
List<meters_info_dev> mID = new List<meters_info_dev>();
HttpResponseMessage response = await client.GetAsync(path);
if (response.IsSuccessStatusCode)
{
mID = await response.Content.ReadAsAsync<List<meters_info_dev>>();
}
else
{
Console.WriteLine("No Record Found");
}
return mID;
}
当我运行应用程序时,我收到异常“提供了无效的请求 URI。请求 URI 必须是绝对 URI 或必须设置 BaseAddress。”
更新 2
我添加了一段新代码:
using (var cl = new HttpClient())
{
var res = await cl.GetAsync("http://localhost:2813/api/metersinfo");
var resp = await res.Content.ReadAsStringAsync();
}
在回复中,我得到了所有记录:
我不知道为什么它不能与其他逻辑一起使用以及问题是什么。我还阅读了Httpclient consume web api via console app C# 和Consuming Api in Console Application 的问题。
任何帮助将不胜感激。
【问题讨论】:
-
在您的第一个屏幕截图中,您将在
mID列表初始化之后立即停留。所以,它不可能被填充。在return mID;语句中放置一个断点并再次检查。 -
@astef
return mID上的计数为零 (0)
标签: c# rest api asp.net-web-api2