尝试使用 Web api 从 Azure 队列中检索消息文本,但消息文本已编码。我如何删除编码

Posted

技术标签:

【中文标题】尝试使用 Web api 从 Azure 队列中检索消息文本,但消息文本已编码。我如何删除编码【英文标题】:Trying to retrieve Message Text from Azure Queue using web api but message text is encoded. how do i remove encoding 【发布时间】:2021-03-15 08:21:01 【问题描述】:

当我检索某些内容时,输出被编码。

QueueClient queue = new QueueClient(connectionString, "outqueue"); 字符串值 = 等待 RetrieveNextMessageAsync(queue);

        return value;

RetrieveNextMessageAsync:

if (await theQueue.ExistsAsync())
        
            QueueProperties properties = await theQueue.GetPropertiesAsync();

            if (properties.ApproximateMessagesCount > 0)
            
                QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1);
                string theMessage = retrievedMessage[0].MessageText;
                await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
                return theMessage;
            

输出: enter image description here

【问题讨论】:

你能告诉我你是如何定义方法RetrieveNextMessageAsync的吗? 需要有关 RetrieveNextMessageAsync 的更多信息。看起来怎么样? 据我所知,默认情况下,如果我们使用 V12 SDK 管理 Azure 队列,消息只是 UTF-8 字符串。更多详情请参考github.com/Azure/azure-sdk-for-net/issues/…。您能否检查一下 Microsoft Storage 探索的消息编码? @Dhatri 你有更新吗? 【参考方案1】:

如果您的消息编码是base64,您可以使用以下代码通过包Azure.Storage.Queues检索它

[HttpGet("getMessage")]
        public async Task<string> GetMessageAsync() 
            string connectionString = "";
            var options = new QueueClientOptions 
                MessageEncoding= QueueMessageEncoding.Base64
            ;
            var queue = new QueueClient(connectionString, "myqueue", options);
           
            var message = await RetrieveNextMessageAsync(queue);
            return message;
        
        static async Task<string> RetrieveNextMessageAsync(QueueClient theQueue)
        
            if (await theQueue.ExistsAsync())
            
                QueueProperties properties = await theQueue.GetPropertiesAsync();

                if (properties.ApproximateMessagesCount > 0)
                
                    QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1);
                    string theMessage = retrievedMessage[0].MessageText;
                    await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
                    return theMessage;
                

                return null;
            

            return null;
        

关于如何查看消息编码,可以使用Azure Storage Explorer

【讨论】:

如果对你有用,可以accept it as an answer吗?

以上是关于尝试使用 Web api 从 Azure 队列中检索消息文本,但消息文本已编码。我如何删除编码的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 ASP.net Web API 中发生授权之前使用 OWIN 注入授权标头

使用 Azure Ad Auth 从 .NET Core Web API 读取/写入 Azure Blob

在 web api 中接收服务总线消息队列/主题

无法验证从 Azure AD 获得的访问令牌签名以保护 Web API

使用 .net 核心 Web API 和 jquery 从 azure blob 上传和检索图像

使用 JWT 令牌保护 asp.net 核心 Web api 时如何从 Azure AD 获取用户