Код состояния ответа не указывает на успех: BadRequest (400); Подстатус: 0 для базовой вставки CosmosDb

Моя объектная модель:

public class PhoneBook
{
    public string Id { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }
}

мое создание контейнера:

db.CreateContainerIfNotExistsAsync("phoneBooks", "/id")

моя команда вставки:

PhoneBook pb = new() { Id = Guid.NewGuid().ToString(), Name = "hello world };

db.GetContainer("phoneBooks").CreateItemAsync(pb, new PartitionKey(pb.Id));

есть идеи, где я ошибаюсь?

Я также попробовал использовать «/Id» в качестве ключа раздела, потому что решил, что он должен быть чувствителен к регистру. Однако никакой радости. Используя проводник данных, я могу легко добавлять контент, даже если назову свойство «id», а ключ раздела — «/Id». Это элемент, который я добавил вручную

{ "id": "4faebd8b-717a-4692-ae00-74aa209d706f", "name": "привет, мир" }

Попробуйте добавить [JsonProperty("id")] к своему свойству Id (в каждом документе есть id, а не Id).

David Makogon 18.07.2024 18:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Код состояния ответа не указывает на успех: BadRequest (400); Подстатус: 0

Спасибо за ваше предложение, Дэвид. Он работает хорошо, и данные были успешно вставлены в контейнер Azure Cosmos DB путем упоминания [JsonProperty("id")] в свойстве Id, как вы можете видеть в приведенном ниже коде.

public class PhoneBook
{
    [JsonProperty("id")]
    public string Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

public CosmosDbService(string endpointUri, string primaryKey, string databaseId, string containerId)
{
    CosmosClientOptions clientOptions = new CosmosClientOptions
    {
        ConnectionMode = ConnectionMode.Direct,
        MaxRetryAttemptsOnRateLimitedRequests = 5,
        MaxRetryWaitTimeOnRateLimitedRequests = TimeSpan.FromSeconds(30)
    };

    _cosmosClient = new CosmosClient(endpointUri, primaryKey, clientOptions);

    _database = _cosmosClient.CreateDatabaseIfNotExistsAsync(databaseId).GetAwaiter().GetResult().Database;

    _container = _database.CreateContainerIfNotExistsAsync(containerId, "/id").GetAwaiter().GetResult().Container;
}

public static async Task Main(string[] args)
{
    string endpointUri = "*****";
    string primaryKey = "*****";
    string databaseId = "db1";
    string containerId = "phoneBooks";

    CosmosDbService cosmosDbService = new CosmosDbService(endpointUri, primaryKey, databaseId, containerId);

    PhoneBook pb = new PhoneBook
    {
        Id = Guid.NewGuid().ToString(),
        Name = "hello world",
        Description = "Sample description"
    };

    await cosmosDbService.CreatePhoneBookItemAsync(pb);
}

Выход:

{
    "id": "69daea1c-fd73-4c27-89b0-50428f27ef89",
    "Name": "hello world",
    "Description": "Sample description"
}

  • Перейдите по этой ссылке , чтобы получить дополнительную информацию об ошибке.

Забавно то, что вы можете добавить документ с идентификатором, а не с идентификатором, используя проводник данных. Результирующий документ будет иметь свойства Id и id. И в ошибке не было никакой информации об отсутствующем свойстве id - по моему мнению, это было бы здесь полезно.

Stephan Steiner 19.07.2024 11:25

Еще один способ решить эту проблему — установить PropertyNamingPolicy из CosmosClientOptions.SerializerOptions на CosmosPropertyNamingPolicy.CamelCase.

Stephan Steiner 19.07.2024 12:03

Другие вопросы по теме