我的数据库中有一个名为USER
的表。该表在我的C#程序中具有关联的API。
我有一个变量,其中填充了一个USER.ID
值。填充字段时,我想使用GET
API返回USER.First_Name
和USER.Last_Name
字段来设置页面上文字的值。
这是我尝试过的代码,但是我不认为我走错了路(每次尝试从user
变量获取属性时,它都告诉我m返回错误的类型/无法将HTTPActionGet的值显式转换为类型USER
或类似的东西。
protected void Page_Load(object sender, EventArgs e)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:#####/api/");
var user = client.GetAsync(client.BaseAddress + "user?=" + ConfigurationManager.AppSettings["TestUserID"]);
user u = new user();
u = user;
MyLiteral.Text = u.First_Name
MyLiteral2.Text = u.Last_Name
}
}
我确信这可能很简单,但是我的Google-fu让我失败了。
答案 0 :(得分:1)
我本来希望看到一些与此类似的代码:
var response = client.GetAsync(client.BaseAddress + "user?=" + ConfigurationManager.AppSettings["TestUserID"]).Result;
if (response.IsSuccessStatusCode)
{
var responseString = response.Content.ReadAsStringAsync().Result;
user u = JsonConvert.DeserializeObject<user>(responseString);
}
并非JsonConvert
来自NuGet包Newtonsoft.Json
我们需要在带有.Result
后缀的方法的末尾加上Async
,因为您的方法不支持异步操作,因此我们不能await
。
答案 1 :(得分:0)
GetAsync
方法返回一个Task
。请read the documentation了解更多详情。
您需要做的是等待方法调用,以便您返回HttpResponseMessage
类型的对象:
var user = await client.GetAsync(client.BaseAddress + "user?=" + ConfigurationManager.AppSettings["TestUserID"]);
或者,您可以调用返回的Result
的{{1}}属性来导致方法调用阻塞并执行相同的操作:
Task
然后您可以使用an extension method反序列化响应的内容:
var user = client.GetAsync(client.BaseAddress + "user?=" + ConfigurationManager.AppSettings["TestUserID"]).Result;
只要您的var u = user.Content.ReadAsAsync<user>();
类型是可序列化的,这当然可以工作。
User
扩展方法还支持重载,如果您使用自定义序列化,则可以在其中指定媒体类型格式化程序。
答案 2 :(得分:-1)
您是否尝试注销返回的类型,因为您使用的是var关键字,因此在我们看来,该类型是不确定的。
Console.WriteLine(user.GetType())或Trace.WriteLine或Debug.WriteLine可以查看返回的用户对象的类型。
一旦您看到返回的类型,就应该弄清楚您能够看到和使用的字段。
然后,您应该能够查看是否正在获取任何数据。
终点-该用户在句法上是否正确?
var user = client.GetAsync(client.BaseAddress +“ user?=” ...
谢谢
菲尔