C# API请求中的无效返回

C# API请求中的无效返回,c#,dotnet-httpclient,C#,Dotnet Httpclient,此处创建了API请求的客户端和通用方法: public class Client : IDisposable { private HttpClient _client; private void CreateClient() { _client = new HttpClient(); _client.DefaultRequestHeaders.Accept.Clear(); _client.DefaultRequestH

此处创建了API请求的客户端和通用方法:

public class Client : IDisposable
{
    private HttpClient _client;

    private void CreateClient()
    {
        _client = new HttpClient(); 
        _client.DefaultRequestHeaders.Accept.Clear();
        _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        _client.DefaultRequestHeaders.Add("KEY", token);
    }


    public void Dispose() => _client?.Dispose();

    public enum Method { GET, POST, PUT, DELETE }

    public HttpResponseMessage Request(string url, Method method, object data, HttpContent request)
    {
        if (data != null)
            request = new StringContent(Serialize(data), Encoding.UTF8, "application/json");

        switch (method)
        {
            case Method.POST: return _client.PostAsync(url, request).Result;
            case Method.PUT: return _client.PutAsync(url, request).Result;
            case Method.DELETE: return _client.DeleteAsync(url).Result;
            default: return _client.GetAsync(url).Result;
        }
    }

    public Task<HttpResponseMessage> RequestAsync(string url, Method method, object data, HttpContent request)
    {
        if (data != null)
            request = new StringContent(Serialize(data), Encoding.UTF8, "application/json");

        switch (method)
        {
            case Method.GET: return _client.GetAsync(url);
            case Method.POST: return _client.PostAsync(url, request);
            case Method.PUT: return _client.PutAsync(url, request);
            case Method.DELETE: return _client.DeleteAsync(url);
            default: return _client.GetAsync(url);
        }
    }

    public string Post(string url, object data) =>
        Request(url, Method.POST, data, null).Content.ReadAsStringAsync().Result;

    public Task<HttpResponseMessage> PostAsync(string url, object data) =>
        RequestAsync(url, Method.POST, data, null);

    //UTILS

    private static string Serialize(object data) =>
        data == null
            ? string.Empty
            : JsonConvert.SerializeObject(data, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
}
请求需要基于几个模型装载,这些模型可以具有这种结构,我正试图以一种简单的方式生成它,如下所示:

    public async Task Test()
    {
        var transaction = new Transaction
        {
            PaymentMethod = new PaymentMethod { Code = "1" },
            Application = "Test",
            Vendor = "Name",
            Customer = new Customer
            {
                //Customer details...
            },
            Products = new List<TransactionProduct>
            {
                //Products...
            }
        };

        var teste = Checkout.Credit(transaction);
        Console.WriteLine(teste);
    }
public async Task<HttpResponseMessage> PostAsync(string url, object data)
{
  var result = await Request(url, Method.POST, data, null);
  return await result.Content.ReadAsStringAsync();
}
我已尝试添加
等待
进行
结帐。信用
呼叫,但我得到:

CS0815  Test C# Cannot assign void to an implicitly-typed variable

用一个简单的HttpClient请求进行单元测试非常有效,但我无法确定我的项目结构上的问题,因此非常感谢任何帮助

Task
是没有返回值的
async
方法的返回类型

或者,换句话说,
async
T
值包装到
Task
(或者
void
返回到
Task
),然后
等待
将这些值展开。由于
Credit
返回
Task
,表达式
Checkout.Credit(transaction)
的类型为
Task
,表达式
等待签出。Credit(transaction)
的类型为
void
。您不能将
void
分配给
var teste
;这就是编译器错误所说的

要解决此问题,请指定
async
方法的返回类型。特别是:

public static async Task<HttpResponseMessage> Credit(object data) => 
    await client.PostAsync(url, data);

这就是为什么我会把人们引导到你的任务岗位上…干得好,先生
public static async Task<HttpResponseMessage> Credit(object data) => 
    await client.PostAsync(url, data);
public string Post(string url, object data) => ...;
public Task<HttpResponseMessage> PostAsync(string url, object data) => ...;
public async Task<HttpResponseMessage> PostAsync(string url, object data)
{
  var result = await Request(url, Method.POST, data, null);
  return await result.Content.ReadAsStringAsync();
}