Как получить атрибут из класса - PullRequest
0 голосов
/ 07 сентября 2018

В моей базе данных есть таблица с именем USER. Эта таблица имеет связанный API в моей программе на C #.

У меня есть переменная, которую я заполняю значением USER.ID. Когда я заполняю поле, я хочу использовать мой GET API для возврата полей USER.First_Name и USER.Last_Name, чтобы установить значение литерала на моей странице.

Вот код, который я пробовал, но я не думаю, что я на правильном пути (каждый раз, когда я пытаюсь получить атрибуты из моей переменной user, он говорит мне, что я возвращаю неправильный тип / не может явно преобразовать значение из 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-фу подвел меня.

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Вы пытались выйти из типа возвращаемого типа, так как вы используете ключевое слово var, поэтому тип является неопределенным, как мы его видим.

Console.WriteLine (user.GetType ()) или Trace.WriteLine или Debug.WriteLine для просмотра типа возвращаемого пользовательского объекта.

Как только вы увидите возвращаемый тип, который должен уточнить поля, которые вы можете видеть и использовать.

Тогда вы сможете увидеть, получаете ли вы какие-либо данные или нет.

Конечная точка - это пользователь? = Синтаксически правильно в этой строке

var user = client.GetAsync (client.BaseAddress + "user? =" ...

Спасибо

Phil

0 голосов
/ 07 сентября 2018

Метод GetAsync возвращает Task. Пожалуйста, прочитайте документацию для более подробной информации.

Что вам нужно сделать, так это дождаться вызова метода, чтобы вы вернули объект типа HttpResponseMessage:

var user = await client.GetAsync(client.BaseAddress + "user?=" + ConfigurationManager.AppSettings["TestUserID"]);

Кроме того, вы можете вызвать свойство Result возвращенного Task, чтобы вызвать блокировку вызова метода и сделать то же самое:

var user = client.GetAsync(client.BaseAddress + "user?=" + ConfigurationManager.AppSettings["TestUserID"]).Result;

Затем вы можете десериализовать содержимое ответа, используя метод расширения :

var u = user.Content.ReadAsAsync<user>();

Это, конечно, работает, если ваш тип User сериализуем.

Метод расширения ReadAsAsync<> также поддерживает перегрузку, при которой вы можете указать форматер Media Type, если вы используете пользовательскую сериализацию.

0 голосов
/ 07 сентября 2018

Я бы ожидал увидеть код, похожий на этот:

 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 их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...