Я отправляю полезную нагрузку json бэкэнду сервера (обработчик .NET .ashx (c #)) через cURL следующим образом:
curl -X POST -d@filename.txt http://localhost:49797/Handler.ashx -H "Content-Type:application/json"
В JSON (в filename.txt) есть пробелстрока в нем (если кто-нибудь из вас узнает его из https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html, который я использую для проверки моего кода подписи AWS4)
{ "expiration": "2015-12-30T12:00:00.000Z",
"conditions": [
{"bucket": "sigv4examplebucket"},
["starts-with", "$key", "user/user1/"],
{"acl": "public-read"},
{"success_action_redirect":"http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-meta-uuid": "14365123651274"},
{"x-amz-server-side-encryption": "AES256"},
["starts-with", "$x-amz-meta-tag", ""],
{"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request"},
{"x-amz-algorithm": "AWS4-HMAC-SHA256"},
{"x-amz-date": "20151229T000000Z" }
]
}
Я читаю полезную нагрузку на сервере следующим образом:
private string getPayloadString(HttpRequest Request)
{
string documentContents;
using (Stream receiveStream = Request.InputStream)
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
{
documentContents = readStream.ReadToEnd();
}
}
return documentContents;
}
Когда я проверяю 'documentContents' в visual studio, я в основном получаю следующую строку:
{ "expiration": "2015-12-30T12:00:00.000Z", "conditions": [ {"bucket": "sigv4examplebucket"}, ["starts-with", "$key", "user/user1/"], {"acl": "public-read"}, {"success_action_redirect": "http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html"}, ["starts-with", "$Content-Type", "image/"], {"x-amz-meta-uuid": "14365123651274"}, {"x-amz-server-side-encryption": "AES256"}, ["starts-with", "$x-amz-meta-tag", ""], {"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request"}, {"x-amz-algorithm": "AWS4-HMAC-SHA256"}, {"x-amz-date": "20151229T000000Z" } ]}
Что, в свою очередь, когда я base64Encode, не соответствует ожидаемому значению настраница AWS (она совпадает, если я буквально жестко закодировал строку в коде своего сервера перед его кодированием)
Мои вопросы
- Я теряю пустую строкукак я читаю полезную нагрузку?Если да, то как мне это сделать?
- Разве cURL не отправляет данные точно так, как они есть в моем текстовом файле?
- Это просто Visual Studio, удаляя их, когда я смотрю на них вТекстовый визуализатор?
Спасибо, эта подпись, не совпадающая с ошибкой от AWS, разрушает мою голову!