gpt4 book ai didi

c# - RestSharp - 数组作为查询字符串参数

转载 作者:行者123 更新时间:2023-11-30 17:33:49 27 4
gpt4 key购买 nike

我无法将数组(int 数组)作为查询字符串参数传递给 RestSharp 客户端

var client = new RestClient(baseUrl);
client.Authenticator = new HttpBasicAuthenticator(username, password);

var request = new RestRequest(_endpoint, Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("contenttype", "application/json; charset=utf-8");
request.AddHeader("Accept", "text/html, application/xhtml+xml, image/jxr, */*");


//i tried with
request.AddParameter("messageIds", "[1,2,3]");
or
request.AddParameter("messageIds", new int[] {1,2,3} );
or
request.AddQueryParameter("messageIds", "[1,2,3]");
or
request.AddQueryParameter("messageIds", new int[] {1,2,3} );

我想问题与参数的UrlEncoding有关

如果我使用“new int[] {1,2,3}”(AddParameter 和 AddQueryParameter)传递值,则 url 以这种方式构建:

ResponseUri = {https://demo.xxxxxxxx.com:8181/ws/messages/zippedMessages?messageIds=System.Int32[]}

如果我将值作为字符串“[1,2,3]”(AddParameter 和 AddQueryParameter)传递,则 url 以这种方式构建:

ResponseUri = {https://demo.xxxxxxxx.com:8181/ws/messages/zippedMessages?messageIds=[1%2C2%2C3]}

一个有效的 url 应该是:

ResponseUri = {https://demo.xxxxxxxx.com:8181/ws/messages/zippedMessages?messageIds=%5B1,2,3%5D}

或至少:

ResponseUri = {https://demo.xxxxxxxx.com:8181/ws/messages/zippedMessages?messageIds=[1,2,3]}

如果相反,“AddParameter”方法对逗号而不是 [] 进行编码。

有没有办法改变这种行为?是否存在诸如 PreExecute 事件之类的东西来重新定位角色?还是其他一些解决方法?

最佳答案

聚会有点晚了,但也可以通过使用 LINQ 来实现,而我在我的案例中所做的是

var request = new RestRequest("ServiceName", Method.GET);

var userIds = new List<int> { 123, 456};
userIds.ForEach(x => request.AddParameter("userIds", x, ParameterType.GetOrPost));

以上代码生成的 URL 将您的整数列表作为查询字符串附加到您的请求中

Your_Service_Name?userIds=123&userIds=456

希望对你有帮助

关于c# - RestSharp - 数组作为查询字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43272070/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com