就在几分钟前,我设法让我的代码与RestSharp
和OAuth2
一起使用,检索访问令牌。我现在想要在我对REST API进行的每次调用中使用该标记。不幸的是,尽管响应状态已经完成,我仍然会收到UnsupportedMediaType
StatusCode
。
当我提出请求时,这是我的代码:
RestClient client = new RestClient("http://www.example.com/myapi/products/get");
client.Proxy = proxy;
RestRequest request = new RestRequest( ) { Method = Method.POST };
request.AddParameter("application/json", String.Format( "{{\"email\": \"{0}\", \"key\": \"{1}\"}}", email, key ), ParameterType.RequestBody);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("access_token",APIAuthenticator.Instance().GetAccessToken(proxy));
var response = client.Execute(request);
APIAuthenticator.Instance().GetAccessToken(proxy)
工作正常,只需获取访问令牌即可。那么问题是什么呢?
答案 0 :(得分:1)
看看你在这做什么
request.AddParameter("application/json",
String.Format( "{{\"email\": \"{0}\", \"key\": \"{1}\"}}", email, key ),
ParameterType.RequestBody);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("access_token",APIAuthenticator.Instance().GetAccessToken(proxy));
首先,使用application/json
Content-Type将正文设置为JSON。请求只能有一个正文。您在最后两行中所做的是覆盖原始行。您将Content-Type设置为application/x-www-form-urlencoded
并将正文设置为访问令牌。
您获得415不支持的媒体类型的原因很可能是因为资源端点期望数据(您的JSON)为application/json
。它不支持你用它覆盖它的类型。如果发生了事件,您仍然发送错误的数据(您的访问令牌)。
那么如何发送访问令牌?可以在查询字符串中发送它(取决于auth服务器配置),即
.../myapi/products/get?access_token=yourAccessToken
但这更适用于Implicit Grant Type。
更常见的方法是在Authorization
标题中发送令牌,如here in the RFC所示,例如
request.AddHeader("Authorization", "Bearer " + accessToken);
现在这取决于auth服务器中配置的配置文件,但在大多数情况下,应该接受Bearer。
然后摆脱
//request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
//request.AddParameter("access_token",APIAuthenticator.Instance().GetAccessToken(proxy));