Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpClient.PostAsync:API正在返回缺少的参数_C#_.net_Http Post_Dotnet Httpclient - Fatal编程技术网

C# HttpClient.PostAsync:API正在返回缺少的参数

C# HttpClient.PostAsync:API正在返回缺少的参数,c#,.net,http-post,dotnet-httpclient,C#,.net,Http Post,Dotnet Httpclient,我正试图用HttpClient发布一个标准restapi。我针对的post方法需要两个键/值对,名称和大小。当我使用下面的代码执行post时,API返回缺少键所需的错误:size。但是,我已经明确地将其添加到FormUrlEncodedContent中 我想知道是否存在编码问题,或者我是否使用了错误的编码 然后我得到了相反的错误消息:缺少必需的密钥:name。好像API因为某种原因没有看到第二个参数。我在Fiddler中检查了请求,一切似乎都是正确的。除非您出于某种原因认为问题是由于使用了Pos

我正试图用HttpClient发布一个标准restapi。我针对的post方法需要两个键/值对,名称和大小。当我使用下面的代码执行post时,API返回缺少键所需的错误:size。但是,我已经明确地将其添加到FormUrlEncodedContent中

我想知道是否存在编码问题,或者我是否使用了错误的编码


然后我得到了相反的错误消息:缺少必需的密钥:name。好像API因为某种原因没有看到第二个参数。我在Fiddler中检查了请求,一切似乎都是正确的。

除非您出于某种原因认为问题是由于使用了PostAsync调用的异步性质造成的,否则请不要用标签标记您的问题。请务必提供可靠的复制您的问题的方法。您是否尝试使用Fiddler检查实际发送的HTTP请求是什么?@ovolko很好的建议。我试试看。在调试时,我看不到实际内容。您也可以使用Postman确保API在给定正确参数的情况下返回您期望的内容。您是说Post可以工作,但PostAsync不能吗?
public async Task<OHDrive> Create(OHDrive drive)
{
    string json = "";
    var values = new Dictionary<string, string>();

    //name and size are required
    if (string.IsNullOrEmpty(drive.Name) || drive.Size == 0)
        throw new Exception("Name and Size are required for drive creation");

    values["name"] = drive.Name;
    values["size"] = drive.Size.ToString();
    if (drive.UserID != null)
        values["user"] = drive.UserID;
    if (drive.Encryption != null)
        values["encryption:cipher"] = drive.Encryption;

    var content = new FormUrlEncodedContent(values);

    using (HttpClient client = OHUtilities.CreateClient(userID, secretKey))
    {
        var url = urlBase + "create";
        var response = await client.PostAsync(url, content);
        json = await response.Content.ReadAsStringAsync();
    }

    return JsonConvert.DeserializeObject<OHDrive>(json);
}
values["size"] = drive.Size.ToString();
values["name"] = drive.Name;