restsharp和邮递员

时间:2019-07-04 16:44:57

标签: oauth-2.0 restsharp

我正在尝试使用RestSharp代码从ZOHO获取OAuth2访问令牌。邮递员模拟工作正常,因此我知道我的代码中缺少某些内容。

我总是得到“无效的客户ID”结果状态。但是在Postman中,当我单击“获取新的访问令牌”时,它可以工作并返回代码。我和邮递员授权标签中的项目相同(client_id,client_secret等)。在Postman中,“正文”设置为“无”,并且没有参数或标题。我的代码和邮递员之间的唯一区别是,邮递员需要回调URL。我的代码尝试使用“自我客户端”获取代码,该代码绕过了回调URL。

我尝试了几种不同的请求调用方法,包括ParameterType.Body和ParameterType.GetOrPost。 GetOrPost与表单相同吗?

client = New RestClient(ZOHO_API_URL)
request = New RestRequest(TokenUrl, Method.POST)
request.AddHeader("content-type", "application/x-www-form-urlencoded") ' also tried: "application/json")
request.AddParameter("grant_type", "authorization_code", 
    ParameterType.GetOrPost)
request.AddParameter("client_id", Client_ID, ParameterType.GetOrPost)
request.AddParameter("client_secret", Client_Secret, 
    ParameterType.GetOrPost)
request.AddParameter("code", Grant_Token, ParameterType.GetOrPost)
response = client.Execute(request)

这是RestSharp的翻译后的邮递员代码:

var client = new RestClient("http://");
var request = new RestRequest(Method.POST);
request.AddHeader("Postman-Token", "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx");
request.AddHeader("cache-control", "no-cache");
IRestResponse response = client.Execute(request);

关于我在做什么的任何想法。我试图查看Fiddler附带的原始数据,但是当我这样做时,Postman指示失败。 我需要使用什么代码来复制Postman的工作?

如果同样需要如何实现回调URL?

2 个答案:

答案 0 :(得分:0)

我迅速检查了ZoHo REST API文档,看来您应该使用受限输入设备authentication flow

从我的帮助页面可以理解,您确实需要执行POST请求,但是必须将参数指定为查询参数:

https://accounts.zoho.com/oauth/v3/device/code?
client_id=1000.GMB0YULZHJK411248S8I5GZ4CHUEX0&
scope=AaaServer.profile.READ&
grant_type=device_request

通过使用client.UseJson(),将JSON设置为序列化和内容类型的默认设置,您还将获得更好的收益。

答案 1 :(得分:0)

由于功能不同,邮递员与RestSharp相比,邮递员可能从API端点进行了重定向(可能缺少尾部斜杠或类似符号)。

尝试添加

client.FollowRedirects = false;

您的RestSharp代码并分析结果。