2016-02-04 75 views
1

我需要经过OAuth2流程的ExactOnline为ExactOnline访问令牌的时候,但我卡住的文档(https://developers.exactonline.com/#OAuth_Tutorial.html%3FTocPath%3DAuthentication%7C_____2)的第3步400错误的请求获得使用RestSharp

使用邮差我创建了下面的C#代码Chrome应用程序测试HTTP请求,但不断收到400错误(错误的请求)。邮差应用程序也给了我400错误,但无论我设置了什么设置,我似乎总是得到400错误。

var authToken = "veryyyyyylongtoken"; 
var redirectUri = "the-url-I-set-in-the-dashboard"; 
var grantType = "authorization_code"; 
var clientId = "id-guid"; 
var clientSecret = "secret"; 
var exactAccesTokenRequestEndpoint = "https://start.exactonline.nl/api/oauth2/token"; 

var client = new RestClient(exactAccesTokenRequestEndpoint); 
var request = new RestRequest(Method.POST); 
request.AddHeader("content-type", "application/x-www-form-urlencoded"); 
request.AddParameter("application/x-www-form-urlencoded", String.Format("code={0}&redirect_uri={1}&grant_type={2}&client_id={3}&client_secret={4}", authToken, exactAccesTokenRequestEndpoint, grantType, clientId, clientSecret), ParameterType.RequestBody); 
var response = client.Execute(request); 

这段代码是怎么错了?

在Exact注册的应用程序正在测试模式下运行,而不是生产。

任何想法?

=====编辑=====

基于古斯曼的指针,我改变了代码以下内容。这仍然给400错误。

var client = new RestClient(exactAccesTokenRequestEndpoint); 
var request = new RestRequest(Method.POST); 
request.AddHeader("content-type", "application/x-www-form-urlencoded"); 
request.AddParameter("code", authToken, ParameterType.RequestBody); 
request.AddParameter("redirect_uri", redirectUri, ParameterType.RequestBody); 
request.AddParameter("grant_type", grantType, ParameterType.RequestBody); 
request.AddParameter("client_id", clientId, ParameterType.RequestBody); 
request.AddParameter("client_secret", clientSecret, ParameterType.RequestBody); 
var response = client.Execute(request); 
+0

请不要编辑你的问题的答案。 –

+0

然后解释该代码的目的是什么。或者这是一个后续问题,这应该是一个新问题。 –

+0

我做到了:-)。在下面的评论中,Gusman的回答也是如此。 – Corstiaan

回答

0

好的,解决了。只好UrlDecode我从在步骤2中的精确响应返回令牌,将它传递给请求在步骤3中,像这样前:

var authToken = WebUtility.UrlDecode("code/token"); 

感谢大家谁加权对此事:-)

0

我看不到你用哪个REST客户端,但我可以承担的“request.AddParameter”呼叫预期名称,内容和ParamType。

如果是这样的话,那么你加错了,你需要做的:

request.AddParameter("code", authToken, ParameterType.RequestBody); 
request.AddParameter("redirect_uri", redirectUri, ParameterType.RequestBody); 

等,必须由一个请求参数添加一台,让其余客户构建体。

编辑:我看到客户端是唯一的名称,OK,这就是RestSharp预计:)

+0

谢谢。我也觉得你的做法更合乎逻辑,分开添加所有参数。然而,我最初的代码是邮政局给我的,所以我就这样做了,假设我不知道比邮差更好的东西。我编辑了我的帖子以包含新代码。它仍然给我一个不幸的400。有任何想法吗? – Corstiaan

1

你的第一个问题是solved by Gusman

我的猜测是第二个问题与您设置的exactAccesTokenRequestEndpoint有关。 Exact对URL真的很挑剔,我怀疑你的URL是否是EOL App Store设置中描述的URL。确保它至少是设置中给出的URL。

因此,如果您的设置包含http://localhost/abc/,则您的redirect_uri应该至少为http://localhost/abc/而不是http://localhost/abc,这似乎有效。

+0

您是指exactAccesTokenRequestEndpoint还是redirectUri?因为redirectUri包含我在仪表板中设置的网址。exactAccesTokenRequestEndpoint设置为“https://start.exactonline.nl/api/oauth2/token”。只是检查,以确保我们在同一页:-) – Corstiaan

+0

是的,这是错误的。它应该和你的应用设置一样。 –

+0

您使用它两次,一次作为POST URL,而不是'redirect_uri'。最后一个是错误的。 –