Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RestSharp-数组作为querystring参数_C#_Asp.net Web Api_Urlencode_Restsharp_Url Encoding - Fatal编程技术网

C# RestSharp-数组作为querystring参数

C# RestSharp-数组作为querystring参数,c#,asp.net-web-api,urlencode,restsharp,url-encoding,C#,Asp.net Web Api,Urlencode,Restsharp,Url Encoding,我无法将数组(int数组)作为查询字符串参数传递给RestSharp客户端 var client = new RestClient(baseUrl); client.Authenticator = new HttpBasicAuthenticator(username, password); var request = new RestRequest(_endpoint, Method.GET); request.AddHeader("cache-control", "

我无法将数组(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} );
我想问题与参数的URL编码有关

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

ResponseUri = {https://demo.xxxxxxxx.com:8181/ws/messages/zippedMessages?messageIds=System.Int32[]}
ResponseUri = {https://demo.xxxxxxxx.com:8181/ws/messages/zippedMessages?messageIds=[1%2C2%2C3]}
如果我以字符串“[1,2,3]”(AddParameter和AddQueryParameter)的形式传递值,则url的构建方式如下:

ResponseUri = {https://demo.xxxxxxxx.com:8181/ws/messages/zippedMessages?messageIds=System.Int32[]}
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”方法编码逗号,但不编码[],如果它是相反的


有没有办法改变这种行为?是否存在像预执行事件这样的事件来重新调整角色的间距?或者其他解决方法?

我实现这一点的方法是使用String.Join()

int[]messageIds={1,2,3};
var request=new RestRequest(_端点,Method.GET);
var stringofits=String.Join(“,”,new List(messageid).ConvertAll(i=>i.ToString()).ToArray());
AddQueryParameter(“MessageId”,StringOfIts);
此行
var stringofits=String.Join(“,”,新列表(messageIds).ConvertAll(i=>i.ToString()).ToArray())将整型数组转换为列表。这允许我们使用列表上的linq表达式将列表中的每个整数转换为字符串。完成后,它会将列表转换回数组,以便您可以对其使用string.Join()。逗号是分隔符

stringofits
将设置为“1,2,3”,这意味着上面整个代码段(作为URL)的输出将是
{u endpoint}?messageIds=1,2,3

编辑: 这项工作归功于以下职位:

我参加聚会有点晚了,但实现这一点的方法是使用LINQ,我在我的情况下所做的是

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

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

希望这有帮助

在实际请求中,它应该表示为
messageIds=a&messageIds=b&messageIds=c
。我没有使用RESTSharp客户端,但是可以简单地多次添加MessageID吗?John的可能副本这会产生一个像你写的那样的url,我正在使用的API愚蠢到不接受这样的参数。很遗憾,我无法更改它。他们是否定义了希望传递数组的格式?使用postman尝试这些格式api可以工作: