在c#中使用httpclienthandler使用一个参数发布多个值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c#中使用httpclienthandler使用一个参数发布多个值相关的知识,希望对你有一定的参考价值。

我正在尝试使用HTTP客户端将表单发送到网站。然后,网站会根据我的请求返回包含数据的列表。这个过程本身运行正常,但是当我在浏览器中手动完成时,我必须做3个请求。

在浏览器中,我有多个复选框,可以对数据应用过滤器。发布的http表单中包含以下数据:

enter image description here

我能够通过在C#中创建一个字典来获取相同的数据,然后我将其转换为FormUrlEncodedContent:

values = new Dictionary<string, string>
{
    { "statuses[]", "2048" },
    { "issued_from", "" },
    { "issued_till", "" },
    { "listing_from", "" },
    { "listing_till", "" },
};
var content = new FormUrlEncodedContent(values);
content.Headers.Add("X-Requested-With", "XMLHttpRequest");
var response = GlobalVar.client.PostAsync(URI, content).Result;

使用这种方法,我必须发出3个请求,然后合并获得的数据。这显然不是我的系统资源成本,服务器资源成本和互联网带宽的最干净的解决方案。

我在浏览器中检查了请求的未格式化标头,如下所示:

Referer: https://www.example.com/en/example/?statuses[]=512&statuses[]=1024&statuses[]=2048&max_results=100&page=1

这导致我得出的结论是,我可能只需将状态三次添加到字典中:

values = new Dictionary<string, string>
{
    { "statuses[]", "512" },
    { "statuses[]", "1024" },
    { "statuses[]", "2048" },
    { "issued_from", "" },
    { "issued_till", "" },
    { "listing_from", "" },
    { "listing_till", "" }
};

不幸的是,字典似乎像数据库一样工作,并且不会多次接受相同的键值。

有没有人能解决我如何在一个请求中发布所有三种状态?我可以使用不同的东西吗?

List<Tuple<string,string>>()?

最好的问候,非常感谢您的帮助。

答案

为值而不是数组发送CSV字符串可能更好。如果你想要一个数组而不是使用以下:

Dictionary<string, string[]> values = new Dictionary<string, string[]>{
                { "statuses", new string[] {"512","1024","2048" }},
                { "issued_from", null },
                { "issued_till", null },
                { "listing_from", null },
                { "listing_till", null }
            };

以上是关于在c#中使用httpclienthandler使用一个参数发布多个值的主要内容,如果未能解决你的问题,请参考以下文章

使用 WinHttpHandler 与 HttpClientHandler 在 Net Framework 上编写的应用程序

从 HttpClient 实例访问 HttpClientHandler?

如何使用 HttpClientFactory 为命名的 HttpClient 定义 HttpClientHandler

多个 HttpClientHandler 实例超时错误

HttpClientHandler / HttpClient 内存泄漏

HttpClientHandler / 请求被中止:无法创建 SSL/TLS 安全通道