这是我第一次使用SAS。我试图使用Service SAS Token访问Azure队列,并尝试插入消息,但它不起作用。当我尝试从浏览器访问生成的URI时,我得到下面的错误
“资源不支持指定的Http Verb。RequestId:cc 1f 2356-f003-0015- 78 b6 - 15 f337000000 Time:2023-11- 12 T22:23:52.3942771Z”。可能是什么问题?下面是我的示例代码
注意:我将使用原始值替换AccountName、AccountName和AccountKey。
public async Task<ApiResponse<BlobServiceClient>> GetServiceQueueSasToken()
{
ApiResponse<BlobServiceClient> result = new ApiResponse<BlobServiceClient>();
try
{
string queueName = "queueName";
string accountName = "accountName";
string accountKey = "accountKey";
StorageSharedKeyCredential storageSharedKeyCredential = new(accountName, accountKey);
var serviceQueueUri = new Uri($"https://{accountName}.queue.core.windows.net/{queueName}");
string sasToken = await CreateServiceQueueSASToken(storageSharedKeyCredential, queueName);
BlobServiceClient blobServiceClientAccountSAS = new BlobServiceClient(new Uri($"{serviceQueueUri}? {sasToken}"));
SendMessageUsingSasToken(blobServiceClientAccountSAS.Uri queueName, sasToken);
result.Data = blobServiceClientAccountSAS;
result.IsSucceed = true;
}
catch (Exception ex)
{
result.IsSucceed = false;
result.Exception = ex;
result.ErrorMessages = new List<string>();
result.ErrorMessages.Add(ex.Message);
}
return result;
}
public static async Task<string> CreateServiceQueueSASToken(StorageSharedKeyCredential sharedKey, string queueName)
{
var queueSasBuilder = new QueueSasBuilder()
{
QueueName = queueName,
ExpiresOn = DateTimeOffset.UtcNow.AddDays(1),
Protocol = SasProtocol.Https
};
queueSasBuilder.SetPermissions(QueueSasPermissions.Add | QueueSasPermissions.Read);
string sasToken = queueSasBuilder.ToSasQueryParameters(sharedKey).ToString();
return sasToken;
}
static void SendMessageUsingSasToken(Uri serviceUri, string queueName, string sasToken)
{
var queueClient = new QueueClient(serviceUri, queueName, sasToken);
queueClient.SendMessage("Your message content", sasToken);
Console.WriteLine("Message sent successfully.");
}
字符串
1条答案
按热度按时间tez616oj1#
在
SendMessageUsingSasToken
方法中使用SAS令牌的问题。QueueClient
构造函数已经期望SAS令牌包含在URI中,因此在创建QueueClient
时不需要再次将其作为参数传递。下面的代码为Azure存储队列生成共享访问签名(SAS)令牌,并使用它将消息发送到指定的队列。
字符串
输出:
的数据
的