Причина, по которой вы не получаете сообщение об ошибке, заключается в том, что запрос не выполняется - чтобы выполнить запрос, вам нужно получить ответ - существует несколько способов сделать это, но зачастую самый простой - просто извлечьВерните текст, используя метод ReadBody ().
Загрузка содержимого файла не может быть выполнена в качестве параметра запроса - согласно API REST dropbox, все тело запроса put должно быть содержимым файла.
Для того, чтобы все это работало, вам необходимо:
- Включить корневой путь "dropbox" или "песочница" в соответствии с API в вашем URL-адресе.отсутствует.Вы используете «песочницу», если ваше приложение DropBox было сконфигурировано с папкой приложения.
- Установите для «UseHeaderForOAuthParameters» значение true в контексте потребителя, чтобы гарантировать, что подпись OAuth и т. Д. Передается как заголовки запроса, а некодируется как параметры формы (поскольку все тело является необработанными данными).
- Используйте метод WithRawContent (byte [] contents) ", чтобы добавить содержимое файла в запрос.
- ИспользуйтеМетод «ReadBody ()» в самом конце цепочки методов запроса PUT, чтобы вызвать выполнение запроса.
Результатом будет строка, содержащая JSON, которая должна выглядеть примерно так:
{
"revision": 5,
"rev": "5054d8c6e",
"thumb_exists": true,
"bytes": 5478,
"modified": "Thu, 29 Dec 2011 10:42:05 +0000",
"path": "/img_fa06e557-6736-435c-b539-c1586a589565.png",
"is_dir": false,
"icon": "page_white_picture",
"root": "app_folder",
"mime_type": "image/png",
"size": "5.3KB"
}
Я добавил пример для проекта DevDefined.OAuth-examples на github, который демонстрирует, как выполнять запросы GET и PUT с DropBox:
https://github.com/bittercoder/DevDefined.OAuth-Examples/blob/master/src/ExampleDropBoxUpload/Program.cs
А вот код, специально необходимый для запроса пут:
var consumerContext = new OAuthConsumerContext
{
SignatureMethod = SignatureMethod.HmacSha1,
ConsumerKey = "key goes here",
ConsumerSecret = "secret goes here",
UseHeaderForOAuthParameters = true
};
var session = new OAuthSession(consumerContext, "https://api.dropbox.com/1/oauth/request_token",
"https://www.dropbox.com/1/oauth/authorize",
"https://api.dropbox.com/1/oauth/access_token");
IToken requestToken = session.GetRequestToken();
string authorisationUrl = session.GetUserAuthorizationUrlForToken(requestToken);
Console.WriteLine("Authorization Url: {0}", authorisationUrl);
// ... Authorize request... and then...
session.ExchangeRequestTokenForAccessToken(requestToken);
string putUrl = "https://api-content.dropbox.com/1/files_put/sandbox/some-image.png";
byte[] contents = File.ReadAllBytes("some-image.png");
IConsumerRequest putRequest = session.Request().Put().ForUrl(putUrl).WithRawContent(contents);
string putInfo = putRequest.ReadBody();
Console.WriteLine("Put response: {0}", putInfo);
Надеюсь, это немного прояснит ситуацию, к сожалению, без документацииЭто немного сложно понять, просто взглянув на исходный код:)