使用RestSharp将GET参数添加到POST请求

len*_*yee 17 .net c# web-services webservice-client restsharp

我想对这样的URL发出POST请求:

http://localhost/resource?auth_token=1234
Run Code Online (Sandbox Code Playgroud)

我想在体内发送JSON.我的代码看起来像这样:

var client = new RestClient("http://localhost");
var request = new RestRequest("resource", Method.POST);
request.AddParameter("auth_token", "1234");    
request.AddBody(json);
var response = client.Execute(request);
Run Code Online (Sandbox Code Playgroud)

如何将auth_token参数设置为GET参数并将请求设置为POST?

Der*_*ter 40

当前版本的RestSharp有一个使用模板的简短方法:

var request = new RestRequest("resource?auth_token={token}", Method.POST);
request.AddUrlSegment("token", "1234");
Run Code Online (Sandbox Code Playgroud)

或者,您可以添加不带模板的参数:

var request = new RestRequest("resource", Method.POST);
request.AddQueryParameter("auth_token", "1234); 
Run Code Online (Sandbox Code Playgroud)

要么

var request = new RestRequest("resource", Method.POST);
request.AddParameter("auth_token", "1234", ParameterType.QueryString); 
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是RestSharp v104.3中添加了ParameterType.QueryString.我的项目引用了旧版本,因此无需升级就无法使用. (5认同)
  • v105.0.0引入了`request.AddQueryParameter(name,value)`,它是`request.AddParameter(name,value,ParameterType.QueryString)的包装器. (3认同)

End*_*050 24

如果你1)将令牌添加到资源URL并且2)指定ParameterType.UrlSegment,这应该工作:

var client = new RestClient("http://localhost");
var request = new RestRequest("resource?auth_token={authToken}", Method.POST);
request.AddParameter("auth_token", "1234", ParameterType.UrlSegment);    
request.AddBody(json);
var response = client.Execute(request);
Run Code Online (Sandbox Code Playgroud)

这远非理想 - 但我发现的最简单的方法......仍然希望找到更好的方法.

  • 有没有人在没有UrlSegment的情况下工作?这很糟糕......我们需要能够在URL中添加参数而不管HTTP VERB,因为它可以遵循HTTP规范......在我的情况下,我有一个基类,所有请求都通过它,和子类只发送post数据,所以我想在基类中封装这个令牌,否则,每次我需要令牌时我需要在URL中添加它...例如这是我在基类上调用的方法它不起作用,除非我之前在请求中设置占位符...羞耻...... (4认同)
  • 是否有更好的解决方案,不涉及在手动指定的查询字符串令牌中使用UrlSegment?这是有效的,但这是一个令人讨厌的解决方法...并且在所有情况下都不适合. (3认同)