C# HttpClient POST 请求

19 浏览
0 Comments

C# HttpClient POST 请求

我正在尝试创建一个POST请求,但无法使其工作。

请求的格式如下,其中有3个参数:accountidentifier / type / seriesid

http://someSite.com/api/User_Favorites.php?accountid=accountidentifier&type=type&seriesid=seriesid

这是我的C#代码:

using (var httpClient = new HttpClient())
{
    httpClient.BaseAddress = new Uri("http://somesite.com");
    var content = new FormUrlEncodedContent(new[] 
    {
        new KeyValuePair("accountidentifier", accountID),
        new KeyValuePair("type", "add"),
        new KeyValuePair("seriesid", seriesId),
    });
    httpClient.PostAsync("/api/User_Favorites.php", content);
}

有什么想法吗?

0
0 Comments

C# HttpClient POST请求的原因是找不到FormUrlEncodedContent类,解决方法是手动输入类名。

在C#中,字典对于这种任务非常有用。

下面是一个完成异步方法的示例,用于完成一个出色的POST请求:

public class YourFavoriteClassOfAllTime {
    // HttpClient应该在实例化后只被创建一次,而不应该被销毁
    private static readonly HttpClient client = new HttpClient();
    public async void Post()
    {
        var values = new Dictionary
        {  
            { "accountidentifier", "要发送到account字段的数据" },
            { "type", "要发送到type字段的数据" },
            { "seriesid", "要发送到seriesid字段的数据" }
        };
        // 将字典转换为“可发布的对象”,如果这样说有意义的话
        var content = new FormUrlEncodedContent(values);
        // 将对象POST到指定的URI
        var response = await client.PostAsync("http://127.0.0.1/api/User_Favorites.php", content);
        // 从服务器读取返回的答案
        var responseString = await response.Content.ReadAsStringAsync();
    }
}

使用.NET 6,但是找不到FormUrlEncodedContent。根据文档,它应该在System.Net.Http中,但我找不到它。我安装了以命名空间命名的NuGet包,并且该包的描述中也提到了这个类,但它仍然不存在。

所以结果证明这是一个IntelliSense的错误,很多人都遇到过这个问题。我在new后面粘贴了类名,它确实检测到了,只是出于某种原因没有提供名称建议。

0
0 Comments

问题的出现原因:

根据提供的内容,问题的出现原因可能是使用HttpClient发送POST请求时出现问题。原始代码中使用了WebClient来发送POST请求,但是由于WebClient是模拟浏览器行为的,可能无法满足某些特殊需求。因此,为了满足对调用REST API的不断增长的需求,推荐使用HttpClient来发送POST请求。根据问题描述,可能是因为没有正确使用HttpClient来调用API,但是具体的API调用情况没有给出,因此无法给出具体的帮助。

解决方法:

根据问题描述,提供了一个使用HttpClient来发送POST请求的代码示例。建议尝试使用HttpClient的PostAsync方法来发送请求,并传递相应的参数。同时,也建议查看API的相关文档,确定应该使用的HTTP动词是什么。如果API文档中没有明确指定,可以尝试使用GetAsync方法来发送请求,并查看返回的结果。

最终,根据问题提供者的回答,尝试使用GetAsync方法发送请求成功,并得到了期望的结果。

0