在c#中使用httpclienthandler使用一个参数发布多个值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c#中使用httpclienthandler使用一个参数发布多个值相关的知识,希望对你有一定的参考价值。
我正在尝试使用HTTP客户端将表单发送到网站。然后,网站会根据我的请求返回包含数据的列表。这个过程本身运行正常,但是当我在浏览器中手动完成时,我必须做3个请求。
在浏览器中,我有多个复选框,可以对数据应用过滤器。发布的http表单中包含以下数据:
我能够通过在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