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

时间:2017-12-28 10:32:56

标签: c# http dictionary xmlhttprequest

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

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

enter image description here

我能够通过在C#中创建一个dictonary来获取相同的数据,然后我将其转换为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>>()?

致以最诚挚的问候,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

为值而不是数组发送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 }
            };