Что должно быть TResult при использовании публичной асинхронной задачи для возврата ответа json из API HTTP Post - PullRequest
0 голосов
/ 11 декабря 2018

Служба учетных записей:

public async Task<string> PostRegistrationToApi(NameValueCollection form)
        try
        {
            string str = await url.WithHeaders(new { Accept = "application /json", User_Agent = "Flurl" }).PostJsonAsync(myDictionary).ReceiveJson();
            return str;
        }

Вот как это выглядит в интерфейсе:

public interface IAccountService
{
    Task<string> PostRegistrationToApi(NameValueCollection form);

Это мой взгляд контроллера:

                string str = await _accountService.PostRegistrationToApi(myform);
                return RedirectToAction("Register");

Этополученное сообщение об ошибке:

Невозможно неявно преобразовать тип 'System.Dynamic.ExpandoObject' в 'string'

Я не мог понять, как решить эту ошибку.Может кто-нибудь сказать мне, что означает это сообщение об ошибке и как это исправить?Сначала я думал, что это проблема типа TResult, но похоже, что даже если я изменю переменную на строковый тип, в соответствии с TResult.Я все еще получаю ту же ошибку.Спасибо!

1 Ответ

0 голосов
/ 15 декабря 2018

Вы получаете эту ошибку, потому что ReceiveJson возвращает dynamic, а не строку.Это позволяет вам работать с результатом как объектом со свойствами, не объявляя соответствующий класс.Это удобно для быстрых и грязных ответов JSON, когда вы знаете, что форма ответа не изменится, но вы отказываетесь от проверки типов во время компиляции, поэтому в большинстве случаев я рекомендую создать соответствующий класс и использовать RecieveJson<T>.

Если вы действительно хотите вернуть строку, вы можете использовать ReceiveString.Если вы просто перенаправляете ответ на что-то другое или записываете его в журнал или что-то, что может быть полезно.Но если вам нужно как-то обработать результат JSON, я бы порекомендовал использовать ReceiveJson или ReceiveJson<T>, чтобы вы могли работать с результатом как объект C #.

...