Я следую документации REST Azure для хранения таблиц: Удалить таблицу , Создать таблицу , Аутентификация для служб хранения Azure .Я могу создать таблицу только после удаления заголовка «Content-Length», который, как ни удивительно, помечен как обязательный и включает «x-ms-version».Этого я мог добиться после нескольких проб и ошибок для включения заголовков.
Аналогичная проблема, с которой я сталкиваюсь при удалении.Я не могу удалить таблицу с помощью REST, если строго следую документации.Я попытался несколько проб и ошибок, но это не помогло в случае удаления.
Ниже приведен фрагмент кода для создания и удаления таблицы.
//Input your Storage Account and access-key associated to it.
const yourStorageAccountName = '';
const accessKeyStorageAccount = '';
const Client = require('node-rest-client').Client;
const crypto = require("crypto");
async function createTable() {
let now = new Date();
let nowUTC = now.toUTCString();
let contentType = "application/json";
// construct input value
let stringToSign = `POST\n\n${contentType}\n${nowUTC}\n/${yourStorageAccountName}/Tables`;
let accesskey = accessKeyStorageAccount;
// create base64 encoded signature
let key = new Buffer(accesskey, "base64");
let hmac = crypto.createHmac("sha256", key);
hmac.update(stringToSign);
let sig = hmac.digest("base64");
console.log("SIGNATURE : " + sig);
let args = {
headers: {
"Authorization": "SharedKey " + yourStorageAccountName + ":" + sig,
"Content-Type": contentType,
"Accept": "application/json;odata=nometadata",
"x-ms-version": "2015-12-11",
"Date": nowUTC,
"DataServiceVersion": '3.0',
"MaxDataServiceVersion": '3.0'
},
data: {
"TableName": "fortwo"
}
};
let restClient = new Client();
restClient.post(`https://${yourStorageAccountName}.table.core.windows.net/Tables`, args, function (data, response) {
console.log(data);
//console.log(response);
});
}
async function deleteTable() {
let now = new Date();
let nowUTC = now.toUTCString();
let contentType = "application/json"
// construct input value
let stringToSign = `DELETE\n\n${contentType}\n${nowUTC}\n/${yourStorageAccountName}/Tables(%27fourtwo%27)`;
let accesskey = accessKeyStorageAccount;
// create base64 encoded signature
let key = new Buffer(accesskey, "base64");
let hmac = crypto.createHmac("sha256", key);
hmac.update(stringToSign);
let sig = hmac.digest("base64");
console.log("SIGNATURE : " + sig);
console.log("nowutc : " + nowUTC);
let args = {
headers: {
"Authorization": "SharedKey " + yourStorageAccountName + ":" + sig,
"Content-Type": contentType,
"Accept": "application/json;odata=nometadata",
"Date": nowUTC,
"x-ms-version": "2015-12-11",
"DataServiceVersion": '3.0',
"MaxDataServiceVersion": '3.0'
}
};
let restClient = new Client();
restClient.delete(`https://${yourStorageAccountName}.table.core.windows.net/Tables('fourtwo')`, args, function (data, response) {
console.log(data);
//console.log(response);
});
}
async function getTableAcl() {
let now = new Date();
let nowUTC = now.toUTCString();
let contentType = "application/json"
// construct input value
let stringToSign = `GET\n\n\n${nowUTC}\n/${yourStorageAccountName}/goodwa\ncomp:acl`;
let accesskey = accessKeyStorageAccount;
// create base64 encoded signature
let key = new Buffer(accesskey, "base64");
let hmac = crypto.createHmac("sha256", key);
hmac.update(stringToSign);
let sig = hmac.digest("base64");
console.log("SIGNATURE : " + sig);
console.log("nowutc : " + nowUTC);
let args = {
headers: {
"Authorization": "SharedKey " + yourStorageAccountName + ":" + sig,
"Date": nowUTC,
"x-ms-version": "2015-12-11"
}
};
let restClient = new Client();
restClient.get(`https://${yourStorageAccountName}.table.core.windows.net/goodwa?comp=acl`, args, function (data, response) {
console.log(JSON.stringify(data));
//console.log(response);
});
}
//createTable()
//deleteTable()
getTableAcl()
То же поведение применяется для GetТаблица ACL .
Я что-то упускаю в обоих случаях?Я в порядке с обходным путем, который я использую для создания.Возможен ли обходной путь для удаления, а также Получить таблицу ACL ?
Прикрепление ниже снимка экрана запроса на удаление через rest-клиент Postman.![Delete Table via Rest client.](https://i.stack.imgur.com/OpPrS.png)
![Delete Table via Rest client with headers as suggested by Gaurav Mantri.](https://i.stack.imgur.com/B2M07.png)
![Delete Table via Rest client with different header combination.](https://i.stack.imgur.com/weiz8.png)
Вверху Остальные вызовы IЯ использую подпись, рассчитанную во фрагменте кода.