如何从课程中获取属性

时间:2018-09-07 14:46:58

标签: c# asp.net asp.net-web-api

我的数据库中有一个名为USER的表。该表在我的C#程序中具有关联的API。

我有一个变量,其中填充了一个USER.ID值。填充字段时,我想使用GET API返回USER.First_NameUSER.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让我失败了。

3 个答案:

答案 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?=” ...

谢谢

菲尔