我正在尝试使用 RestSharp v107 获取身份验证令牌,但我不知道如何使其工作。我已经包含了以前的方法,在更新到 v107 之前该方法运行良好。有什么想法吗?
v107 返回 StatusCode = MethodNotAllowed 的代码:
private static async System.Threading.Tasks.Task<string> GetAuthTokenAsync()
{
GetCreds();
var client = new RestClient(_authUrl);
var request = new RestRequest();
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "client_credentials");
client.Authenticator = new HttpBasicAuthenticator(_authClientId, _authClientSecret);
var response = await client.ExecutePostAsync(request);
var deserializedResponse = JsonSerializer.Deserialize<Dictionary<string, string>>(response.Content);
string authToken = deserializedResponse["access_token"];
return authToken;
}
在 v107 之前运行良好的旧代码:
private static string GetAuthToken()
{
GetCreds();
var client = new RestClient(_authUrl);
var request = new RestRequest() { Method = Method.POST };
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "client_credentials");
client.Authenticator = new HttpBasicAuthenticator(_authClientId, _authClientSecret);
var response = client.Execute(request);
var deserializer = new JsonDeserializer();
var deserializedResponse = deserializer.Deserialize<Dictionary<string, string>>(response);
string authToken = deserializedResponse["access_token"];
return authToken;
}
看看如果在实例化时定义方法会发生什么:
var request = new RestRequest(_authUrl, Method.Post)
.AddHeader("Content-Type", "application/x-www-form-urlencoded")
.AddParameter("grant_type", "client_credentials");
(也可以在同一个语句中添加参数)
请告诉我它是否已解决,因为我也在 v107 上苦苦挣扎:D
我建议在 RestSharp 存储库中打开一个问题,这样我可以帮助你。
我建议对您的代码进行一些更改。
_authUrl
,因此您应该在构造函数中实例化 RestClient
并将其保存在私有字段中,例如 _client
您可以使用例如
HttpTracer
来跟踪请求,如文档中的 所述。然后您可以轻松查看请求是否因某种原因被破坏。
代码可能如下所示:
private async Task<string> GetAuthTokenAsync()
{
GetCreds();
var request = new RestRequest().AddParameter("grant_type", "client_credentials");
var response = await client.PostAsync<Dictionary<string, string>>(request);
return response["access_token"];
}
更新 该问题是由 RestSharp 设置的
Accept
标头中的一些错误值引起的,现已修复。
对我来说,这是因为我根据文档示例添加了一个额外的标头,这肯定导致 Laravel 中从 Get 重定向到 Post。
//client.AddDefaultHeader("Content-Type", "application/json"); //bad in my case
client.AddDefaultHeader("Accept", "application/json"); //good in my case