144 votes

Azure table storage renvoie 400 Bad Request

Je l'ai exécuté en mode débogage, et je joins une image avec les détails de l'exception. Comment puis-je savoir ce qui a mal tourné ? J'essayais d'insérer des données dans un tableau. Azure ne peut pas me donner plus de détails ?

Obs : Le stockage est sur Windows Azure et non sur ma machine. Les tables ont été créées, mais j'obtiens cette erreur lors de l'insertion de données

enter image description here

// Retrieve the storage account from the connection string.
Microsoft.WindowsAzure.Storage.CloudStorageAccount storageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=***;AccountKey=***");

// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

// Create the table if it doesn't exist.
CloudTable table = tableClient.GetTableReference("EmployeeOnlineHistory");
table.CreateIfNotExists();

et voici le code d'insertion :

public static void SetStatus(Employee e, bool value)
{
    try
    {
        // Retrieve the storage account from the connection string.
        Microsoft.WindowsAzure.Storage.CloudStorageAccount storageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=###;AccountKey=###");

        // Create the table client.
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

        // Create the CloudTable object that represents the "people" table.
        CloudTable table = tableClient.GetTableReference("EmployeeOnlineHistory");

        // Create a new customer entity.

        if (value == true)
        {
            EmployeeOnlineHistory empHistory = new EmployeeOnlineHistory(e.Id);
            empHistory.IsOnline = true;
            empHistory.OnlineTimestamp = DateTime.Now;
            TableOperation insertOperation = TableOperation.Insert(empHistory);
            table.Execute(insertOperation);
        }
        else
        {
            TableQuery<EmployeeOnlineHistory> query = new TableQuery<EmployeeOnlineHistory>()
                .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, e.Id.ToString()));
            EmployeeOnlineHistory entity = table.ExecuteQuery(query).Take(1).FirstOrDefault();

            if ((entity!=null)&&(entity.IsOnline))
            {
                entity.IsOnline = false;
                entity.OfflineTimestamp = DateTime.Now;
                entity.OnlineTime = (entity.OfflineTimestamp - entity.OnlineTimestamp);
                TableOperation updateOperation = TableOperation.Replace(entity);
                table.Execute(updateOperation);
            }
            else
            {
                EmployeeOnlineHistory empHistory = new EmployeeOnlineHistory(e.Id);
                empHistory.IsOnline = false;
                empHistory.OfflineTimestamp = DateTime.Now;
                TableOperation insertOperation = TableOperation.Insert(empHistory);
                table.Execute(insertOperation);
            }
        }
    }
    catch (Exception ex)
    {
        //var details = new System.IO.StreamReader(((Microsoft.WindowsAzure.Storage.StorageException)ex)..Response.GetResponseStream()).ReadToEnd();
        LogFile.Error("EmployeeOnlineHistory.setStatus",ex);
    }
}

3voto

Ravi Anand Points 1319

Dans mon cas : Le nom du conteneur était en majuscule. il y a des limites à l'utilisation des caractères. enter image description here

1voto

huha Points 741

Vous trouverez une documentation de MS sur tous les codes d'erreur du service de table. ici

1voto

Stig Points 162

Je recevais un message (400) Bad Request, StatusMessage:Bad Request, ErrorCode:OutOfRangeInput lorsque l'entité avait une propriété DateTime non définie (= DateTime.MinValue).

1voto

gatsby Points 320

J'ai eu la même erreur BadRequest(400), à la fin j'ai rempli manuellement :

enter image description here

Et ça a marché pour moi. J'espère que cela vous aidera !

0voto

Dilip Nannaware Points 863

J'ai également rencontré le même genre de problème. Dans mon cas, la valeur de PartitionKey n'a pas été définie, donc par défaut, la valeur de PartitionKey était nulle, ce qui a donné le résultat suivant Object reference not set to an instance of an object. exception

Vérifiez si vous fournissez les valeurs appropriées pour PartitionKey ou RowKey, vous pouvez rencontrer ce problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X