使用 public 异步任务到 return json 来自 API HTTP Post 的响应时 TResult 应该是什么

What should TResult be when using public async Task to return json response from API HTTP Post

账户服务:

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类型的问题,但是即使我把变量改成string类型也好像和TResult一致。我仍然遇到同样的错误。谢谢!

您收到该错误是因为 ReceiveJson returns 是 dynamic,而不是字符串。这使您可以将结果作为具有属性的对象来处理,而无需声明匹配 class。这对于快速和肮脏的 JSON 响应很方便,您知道响应的形状不会改变,但您放弃了编译时类型检查,所以在大多数情况下我建议创建一个匹配的 class并使用 RecieveJson<T>.

如果你真的想取回一个字符串,你可以使用ReceiveString代替。如果您只是将响应转发给其他东西或将其转储到日志或可能有用的东西。但是,如果您需要以某种方式 处理 JSON 结果,我建议您使用 ReceiveJsonReceiveJson<T> 以便您可以将结果作为 C#对象。