RestSharp.RestResponse而不是json字符串作为认证响应



我一直致力于使用Rest Api进行身份验证(https://api.vorexlogin.com/)到目前为止,我已经添加了RestSharp库来消除RestClient和RestRequest的错误。

到目前为止,当我运行文本框中的代码时,我得到这个:

RestSharp.Response

需要的响应应该是这样的:

"success": true,
"result": {
"accessToken": "eyJhbGtccccc.xxxx.yyyyzzzzz",
"refreshToken": "67ZYfdsJFDKLS879337937DKJSDLGFSDFRDEMO=",
"accessTokenExpireOn": "2021-07-03T22:19:23.8330686Z",
"refreshTokenExpireOn": "2021-08-02T21:49:23.8330686Z"
}

即使失败,它仍然应该是某种json文件。我将在下面提供我的代码。

private async void button1_Click(object sender, EventArgs e)
{
var client = new RestClient("https://api.vorexlogin.com/v2/security/authenticate");
var request = new RestRequest("resources", Method.Post);
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddHeader("accept", "application/json");
request.AddParameter("application/x-www-form-urlencoded",
"grantType=password&userName=+"+ usernametbx + "&password=" + passwordtbx + "&tenant=" + tenanttbx, ParameterType.RequestBody);

var response = await client.PostAsync<IRestResponse>(request);
textBox1.Text = response.ToString();
}
public class IRestRepsonseList
{
public string accessToken { get; set; }
public string refreshToken { get; set; }
public string accessTokenExpireOn { get; set; }
public string refreshTokenExpireOn { get; set; }

}
public class IRestResponse
{
public bool success { get; set; }
public List<IRestRepsonseList> result { get; set; }
}

通过使用PostAsync<T>,您告诉RestSharp对T的响应进行反序列化。您的IRestResponse类不实现ToString(),因此您的代码使用默认的object.ToString,它只返回实例类名。

我还建议您阅读文档,因为您写了许多不必要的代码。

下面是你应该做的一个例子:

var client = new RestClient("https://api.vorexlogin.com/v2/security/authenticate");
var request = new RestRequest("resources", Method.Post)
.AddParameter("grantType", "password")
.AddParameter("userName", usernametbx)
.AddParameter("password", passwordtbx)
.AddParameter("tenant", tenanttbx);
var response = await client.PostAsync(request);
textBox1.Text = response.Content;