DynamoDB UpdateItem не работает при вызове через. NET api - PullRequest
1 голос
/ 14 апреля 2020

Я использую DynamoDb для настройки таблицы, которую можно обновлять с помощью вызовов API. Изучив документацию по DynamoDB, я написал функцию элемента обновления в. NET следующим образом:

public static async Task IntAsync(string phone, string s)
    {
        getAsync(phone).Wait();
        AmazonDynamoDBConfig clientConfig = new AmazonDynamoDBConfig();
        clientConfig.RegionEndpoint = RegionEndpoint.APSouth1;
        try
        {
            using (IAmazonDynamoDB ddbClient = new AmazonDynamoDBClient(clientConfig))
            {
                await ddbClient.UpdateItemAsync(new UpdateItemRequest
                {
                    TableName = "TableName",
                    Key = new Dictionary<string, AttributeValue>
                    {
                        {"ID", new AttributeValue{S=phone} },
                    },
                    ExpressionAttributeNames = new Dictionary<string, string>()
                    {
                        {"#P", "Progress" },
                        {"#A", "attempt"+count.ToString() },
                        {"#S", s }
                    },
                    ExpressionAttributeValues = new Dictionary<string, AttributeValue>()
                    {
                        {":s",new AttributeValue {S=DateTime.Now.ToString()}},

                    },
                    UpdateExpression = "SET #P.#A.#S = :s",
                    ConditionExpression = "attribute_not_exists(#P.#A.#S)"
                });
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Update Error: " + e.Message);
        }
    }

Проблема: Эта функция прекрасно работает при вызове через main, и изменения отражается мгновенно, однако вызов той же функции через ядро. Net. Запрос Get api не возвращает никакого результата и продолжает отправлять запрос почтальону.

Запрос на получение выглядит следующим образом:

 public async Task<string> GetAsync(string mobile, string s)
 { 
    await Program.IntAsync(string mobile, string s); 
    return "Done";
 }

Однако удаление вызова функции из запроса на получение приводит к выполнению запроса, и все остальные функции работают отлично. У меня есть несколько других запросов на обновление через запросы get, все они отлично работают.

Вот что почтальон продолжает говорить enter image description here

1 Ответ

0 голосов
/ 14 апреля 2020

Добро пожаловать в сообщество BYNARI
Ваш код выглядит хорошо, за исключением того, что не возвращает никакого значения, я бы изменил его, чтобы получить ответ об обновлении, так как UpdateItemAsyn c возвращает ответ :) Измените это

public static async Task IntAsync(string phone, string s)
{
    //getAsync(phone).Wait();
    AmazonDynamoDBConfig clientConfig = new AmazonDynamoDBConfig();
    clientConfig.RegionEndpoint = RegionEndpoint.APSouth1;
    try
    {
        using (IAmazonDynamoDB ddbClient = new AmazonDynamoDBClient(clientConfig))
        {
            await ddbClient.UpdateItemAsync(new UpdateItemRequest

К

public static async Task IntAsync(string phone, string s)
    {

        //Added this variable
        UpdateItemResponse updateResponse = null;
        getAsync(phone).Wait();
        AmazonDynamoDBConfig clientConfig = new AmazonDynamoDBConfig();
        clientConfig.RegionEndpoint = RegionEndpoint.APSouth1;
        try
        {
            using (IAmazonDynamoDB ddbClient = new AmazonDynamoDBClient(clientConfig))
            {
              //using the variable
                updateResponse = await ddbClient.UpdateItemAsync(new UpdateItemRequest
***

В конце вы должны вернуть updateResponse , если вы не будете выполнять какие-либо преобразования в него

и вы конечно, проверьте, если не ноль, затем верните ваш updateResponse в ваш метод "GetAsyn c"
Даже в вашем методе GetAsyn c вы захотите вернуть свой UpdateItemResponse

, чтобы он выглядел что-то вроде:

 public async Task<string> GetAsync(string mobile, string s)
  { 
     var response = await IntAsync(string mobile, string s); 
     //Then you pack/unpack your response to get your attributes and
     //convert them to string if that is what you need
     var valueToReturn = CustomStringMethod(response.Attributes);
     return valueToReturn;
  }

Вот ссылка на руководство разработчика aws, которое также может вам помочь :) Обновление записи в DynamoDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...