Аутентификация для Box в C# 4.0
Я пытаюсь получить токен доступа, используя приведенный ниже код на языке C#, но я получаю исключение 400 неверных запросов.
Код:
WebRequest httpWReq = WebRequest.Create("https://www.box.com/api/oauth2/token");
string postData = "grant_type=authorization_code";
postData += "&code=" + Code;
postData += "&client_id=MY_CLIENT_ID";
postData += "&client_secret=MY_CLIENT_SECRET";
postData += "&redirect_uri=https://www.google.com";
byte[] data = Encoding.UTF8.GetBytes(postData);
httpWReq.Method = "POST";
httpWReq.ContentType = "application/x-www-form-urlencoding";
httpWReq.ContentLength = data.Length;
using (Stream stream = httpWReq.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var response = httpWReq.GetResponse();
var responseStream = response.GetResponseStream();
using (var reader = new StreamReader(responseStream))
{
var responseReader = reader.ReadToEnd();
MessageBox.Show(responseReader);
}
Но я всегда получаю следующую ошибку:
{"error":"invalid_request","error_description":"Invalid grant_type parameter or parameter missing"}
Как преодолеть эту проблему?
Любая помощь будет оценена. Заранее спасибо.
Спасибо, Хариш Редди
2 ответа
Решение
Я вижу две возможные проблемы, обе с этой строкой:
postData += "&redirect_uri=https://www.google.com";
- Я думаю, вам нужно будет urlencode URI перенаправления.
- Я предполагаю, что вы не являетесь владельцем домена google.com, так что это недопустимое значение.:) Вам нужно будет указать домен, с которого вы делаете запрос. Или еще лучше, предварительно установите этот URI перенаправления на странице конфигурации вашего приложения Box.
Кстати, вы можете быть заинтересованы в проверке SDK Box API v2 для.Net (и соответствующего примера OAuth на основе MVC), который работает на GitHub и NuGet. (Полное раскрытие: я участвую в обоих.)
HttpWebRequest httpWReq =
(HttpWebRequest)WebRequest.Create("https://api.box.com/oauth2/token");
ASCIIEncoding encoding = new ASCIIEncoding();
string postData = "grant_type=authorization_code";
postData += "&code=" + authorizationCode;
postData += "&client_id=" + ClientId;
postData += "&client_secret=" + ClientSecretId;
byte[] data = encoding.GetBytes(postData);
httpWReq.Method = "POST";
httpWReq.ContentType = "application/x-www-form-urlencoded";
//httpWReq.ContentType = "application/x-www-form-urlencoded";
httpWReq.ContentLength = data.Length;
using (Stream stream = httpWReq.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}