调用REST服务总是失败(使用RESTSharp)

本文关键字:使用 RESTSharp 失败 REST 服务 调用 | 更新日期: 2023-09-27 18:19:29

我正在尝试与REST服务对话,使用Postman或Fiddler等工具,我可以很好地获得预期的结果。

现在,我尝试使用RestSharp 104.4从我的C#代码中执行同样的操作。

我设置了REST客户端并定义了用户代理字符串,以及默认的Content-TypeAccept头:

_restClient = new RestClient();
_restClient.UserAgent = CreateUserAgentString();
_restClient.AddDefaultHeader("Content-Type", "application/json");
_restClient.AddDefaultHeader("Accept", "application/json");

然后,我尝试调用一个名为/token的方法来获取基于HTTP Basic Auth:的安全令牌

RestRequest request = new RestRequest(_baseServiceUrl + GetTokenUrl, Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddHeader("Authorization", "Basic " + baseAuth);  // baseAuth contains the base Auth string
request.AddBody(request.JsonSerializer.Serialize(new { clientIdentifier = "Outlook", clientId = "52c600f6-262c-4fca-a4bc-e0e322e0571e" }));

我的问题是:这个POST请求总是失败,并出现"内部服务器错误":

Authorization: Basic .........
Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
User-Agent: my defined user agent string
Content-Type: application/json
Host: dev.xxx.yyyyyyyy.ch
Content-Length: 90
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

正文:

"{'"clientIdentifier'":'"Outlook'",'"clientId'":'"52c600f6-262c-4fca-a4bc-e0e322e0571e'"}"

问题有几个:

  • 我得到的Accept标头项目太多了——我怎么能只得到Accept: application/json而不得到其他项目?(正如我所想的那样,在REST客户端上设置默认的头)
  • 设置Accept-Encoding: gzip,deflateConnection: Keep-Alive似乎也会引起麻烦——我需要在RESTSharp客户端上使用哪些选项/设置来避免这些问题
  • POST主体有不必要的"',这会导致问题——我该如何解决

调用REST服务总是失败(使用RESTSharp)

填充缺失的链接。以下内容应该有效:

_restClient = new RestClient();
_restClient.BaseUrl = url;
var request = new RestRequest(_baseServiceUrl + GetTokenUrl, Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddHeader("Authorization", "Basic " + baseAuth); 
request.AddBody(new {
    root = new { 
        clientIdentifier = "Outlook", 
        clientId = "52c600f6-262c-4fca-a4bc-e0e322e0571e" 
    }
});

我过去使用过WebRequest,我确信,我不会再这样做了:D